Найти - Пользователи
Полная версия: Удаление из списка в цикле
Начало » Python для экспертов » Удаление из списка в цикле
1
jan2ary
Есть код:
>>> lst=range(1,10)
>>> lst

>>> for i in lst:
lst.remove(i)
Каково будет значение lst после его выполнения? А теперь попробуйте…
У кого предположение совпало с опытом?

Для меня такое поведение не было интуитивно понятным. Интересно, сколько еще новичков на этом голову посушили? :)
slivlen
jan2ary
Каково будет значение lst после его выполнения? А теперь попробуйте…
У кого предположение совпало с опытом?
У меня совпало. Изменять список по которому проходишь в цикле - плохая идея, котороя приходит в голову только, разве что, новичкам(Вообще надо внимательней читать доки. Там есть явное предостережение от ипользования таких конструкций). Если надо изменять этот список, то надо предварительно создать его копию, и в цикле менять именно ее.

Python 2.4.2 (#1, Feb 12 2006, 03:59:46)
on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import copy
>>> l=range(0,10)
>>> l

>>> lc=copy.copy(l)
>>> for i in l:
… lc.remove(i)

>>> lc

>>>


http://www.python.org/doc/2.4/ref/for.html
jan2ary
Да вот к этому решению я в конце концов и пришел.
За ссылку спасибо, я искал заметку об этом в разделе о списках…
slav0nic

>>> lst=range(1,10)
>>> for i in lst:
… print i
… lst.remove(i)
… print lst

1

3

5

7

9

>>>
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB