2015-06-29 3 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]] 

Согласно вложенному списку понимания, является первым «я», а вторым «я» тем же переменным и сделать они оба увеличения в то же время? Я предполагаю, что я не понимаю, как в результате большой список идет от первого подсписка [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, код выдавал бы ошибку, потому что один из двух не будет определен.

Вы можете быть заинтересованы в этом вопросе: 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 
Смежные вопросы