2012-12-08 38 views
1

我有一個Python列表,我試圖使用列表理解打印出前五個元素。雙重列表理解範圍

我知道這必須使用雙列表解析來完成。我目前有以下幾種:

print [[x[i] for x in mylist] for i in range(0,5)] 

這會引發以下錯誤:IndexError: tuple index out of range

當我分別打印每一個,它工作得很好。我做print mylist[0]print mylist[1]等...

這裏有什麼問題?我有一種感覺,我的整個雙重理解是不正確的。現在,這裏就是我想:

[x for x in range(0,5)] 

這就造成有效範圍內的每個x(0,5)X的列表。由於這是我的索引,因此我在上面嵌套了另一個列表理解語句,以便在我的具體列表中執行此操作。

任何幫助表示讚賞。謝謝!

回答

2

mylist[:5]給出mylist的前5個元素。 (如果mylist的元素少於5個,那麼mylist[:5]將返回一個長度爲len(mylist)的列表。)在這裏使用列表理解將是矯枉過正的。

+0

您建議替代''[[x]我在範圍內(0,5)] for m in mylist]'而不是'[[x [i] for mylist] for i in range(0,5)]' - 仔細閱讀。 – akaRem

0

您正嘗試訪問超出範圍的索引。 這意味着你的x元組的長度爲< 5.

它發生的數據,如[[1,2,3],[4,5,6]..]

在此,x是[1,2,3],然後[4,5,6]

當您嘗試x[5] - 你會得到異常

1

unutbu's是最好的解決方案。通過遍歷的演藝吧,你想要

[mylist[i] for i in range(5)] 
0

打印[MYLIST [J]的j [我爲我的range(5)]]

雖然@ unutbu的做法是更具可讀性。

1

提供myList至少包含5個元素,你真的要使用列表理解,試試這個:

[print (mylist[i]) for i in range (0, 5)] 
1

至於爲什麼你所得到的錯誤,如果myList是一個元組列表,看看它是這樣的:

myList = [(0, 1), (1, 2), (2, 3)] 

result = [] 
for i in range(5): 
    sub_result = [] 
    # Here x will be (0, 1), etc. 
    for x in myList: 
     # Here you are referencing the ith element of your tuple 
     # If your tuple doesn't contain that many elements, you get the error 
     sub_result.append(x[i]) 

因此它訪問你的元組而不是你的列表。其他解決方案都顯示如何糾正這一點,所以絕對投它們一個 - 這將有助於找出爲什麼它會導致錯誤:)