2015-06-29 249 views
1

我正在學習python並閱讀他們的教程。我理解列表理解和嵌套列表理解。儘管如此,我試圖理解事件的順序。python嵌套列表解析

>>> matrix = [ 
...[1, 2, 3, 4], 
...[5, 6, 7, 8], 
...[9, 10, 11, 12], 
... ] 
>>> [[row[i] for row in matrix] for i in range(4)] 
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4,8,12]] 

根據嵌套列表理解,是第一個「i」和第二個「我」同一個變量,做他們都增加在同一時間?我想我不理解所產生的大列表從所述第一子列表[1,5,9],將第二子列表如何去[2,6,10]

+0

只是爲了好玩,請注意,您可以產生這些結果與['拉鍊(*矩陣)'](HTTPS ://docs.python.org/3/library/functions.html#zip)。 – TigerhawkT3

回答

1
[[row[i] for row in matrix] for i in range(4)] 

相當於

my_list = [] 
for i in range(4): 
    my_list_2 = [] 
    for row in matrix: 
     my_list_2.append(row[i]) 
    my_list.append(my_list_2) 


是第一個「i」和第二個「我」同一個變量,做他們都增加在同一時間?

當然是這樣。如果它不是相同的i,則代碼會拋出一個錯誤,因爲其中一個不會被定義。

您可能感興趣的這個問題:Understanding nested list comprehension

-1

有一點要記住的是,只是因爲事情左側「端」,但這並不意味着他們就開始在右側。

所以,這個工程:

>>> [x for i in enumerate(range(5)) for x in i] 
[0, 0, 1, 1, 2, 2, 3, 3, 4, 4] 

但這是錯誤的:

>>> [x for x in i for i in enumerate(range(5))] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'i' is not defined