2013-04-19 2 views
1

Я работаю над проектом, и мне нужно повторить список в списке определенное количество раз. Очевидно, что L.append (L) просто добавляет элементы снова, не создавая отдельные списки. Я просто не понимаю, как сделать списки отдельными в большом списке.Повторить список в списке X Количество раз

В краткой форме, это то, что у меня есть:

L = [1,2,3,4,5] 

Если бы я хотел, чтобы повторить его, скажем, в 3 раза, так что я должен был бы:

L = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]] 

Как достичь это? Я ищу списки в большом списке.

Заранее спасибо.

+1

Как примечание стороны, это не то, что 'L.append (L)' делает. Попробуйте и посмотрите; вы будете удивлены тем, что он делает (и это стоит понимания). – abarnert

+0

@abarnert Вау, я никогда об этом не знал. Это только то, что выполняется, когда найден бесконечный цикл или что-то еще? – TerryA

+0

Он просто добавляет копию самого 'L' как последнего элемента' L'. В этом нет ничего необъяснимого ... Но если вы попытаетесь, скажем, сгладить это или пройти, как дерево, то это даст вам бесконечный цикл. (Если вы думаете об этом, распечатка списка означает его прохождение как дерево ... но Python достаточно умен, чтобы проверить это при распечатке списка, поэтому вы получаете '[1, 2, 3, 4, 5, [. ..]] 'вместо бесконечной стены текста.) – abarnert

ответ

8

Нет необходимости в каких-либо функций:

>>> L = [1,2,3,4,5] 
>>> [L]*3 
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]] 

Однако, следует отметить, что если изменить одно значение в любом из списков, все остальные будут меняться, потому что они ссылаются на один и тот же объект.

>>> mylist = [L]*3 
>>> mylist[0][0] = 6 
>>> print mylist 
[[6, 2, 3, 4, 5], [6, 2, 3, 4, 5], [6, 2, 3, 4, 5]] 
>>> print L 
[6, 2, 3, 4, 5] 

Чтобы избежать этого:

>>> L = [1,2,3,4,5] 
>>> mylist = [L[:] for _ in range(3)] 
>>> mylist[0][0] = 6 
>>> print L 
[1, 2, 3, 4, 5] 
>>> print mylist 
[[6, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]] 

Обратите внимание, как L не изменилось, и только первый список в mylist изменилось.

Спасибо всем в комментариях за помощь :).

+3

Все списки одинаковы, поэтому, если вы меняете один из этих списков, вы меняете все остальные. Используйте '[l для _ в xrange (3)]', если этот «побочный эффект» не нужен. – Volatility

+0

@ Волатильность Ах да, я добавлю это. Спасибо :) – TerryA

+0

@Volatility - Это именно то, что я собирался сделать, и я думаю, что очень важно от фундаментального понимания python узнать, почему это другое. – mgilson

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