2014-01-31 3 views
0

У меня есть такой сценарий:Обнаружение первого элемента в списке списков

>>> y=[[1]] 
>>> y=y*2 
>>> y 
[[1], [1]] 
>>> y[0].append(2) 
>>> y 
[[1, 2], [1, 2]] 

То, что я хотел бы сделать, это добавить 2 в первый список внутри внешнего списка т.е. это желаемый результат:

[[1, 2], [1]] 
+0

закрыть это, тогда люди - спасибо всем за ссылки и ответы – whytheq

ответ

1

Выполнение:

y=[[1]] 
y=y*2 

создает список с двумя ссылками на тот же объект списка:

>>> y=[[1]] 
>>> y=y*2 
>>> id(y[0]) # The id of the first element... 
28864920 
>>> id(y[1]) # ...is the same as the id of the second. 
28864920 
>>> 

Это означает, что при изменении одной из них будет затронута и другая.


Чтобы устранить эту проблему, вы можете использовать вместо list comprehension:

>>> y = [[1] for _ in xrange(2)] # Use range here if you are on Python 3.x 
>>> y 
[[1], [1]] 
>>> id(y[0]) # The id of the first element... 
28864920 
>>> id(y[1]) # ...is different from the id of the second. 
28865520 
>>> y[0].append(2) 
>>> y 
[[1, 2], [1]] 
>>> 
0

Заменить: у = у * 2 по y.append ([1]) иметь различные ссылки ,

+1

Не используйте append. iCodez имеет правильный подход, используя списки. –

Смежные вопросы