LINUX.ORG.RU

удаление списка поэлементно [python]

 


0

1

Добрый день. Необходимо поэлементно произвести некое действие (скажем, print) и удалить только что использовавшийся элемент списка. Но, так как при каждом проходе цикла используется следующий элемент списка, удаляется не весь список и не весь опять-таки выводится. Вот пример:

a=[1,2,3,4,5]
for b in a:
    print b
    a.remove(b)
    print a
выводит:
1
[2, 3, 4, 5]
3
[2, 4, 5]
5
[2, 4]
надо чтоб выводил:
1
[2, 3, 4, 5]
2
[3, 4, 5]
3
[4, 5]
4
[5]
5
[]
Конечно можно использовать
a=[1,2,3,4,5]
c=a[:]
for b in c:
но у меня смутное ощущение что это можно сделать как-то лучше. Не нагуглил.
Кстати, в который из форумов это правильно было поместить?

[code] a=[1,2,3,4,5] for b in a: print b a.remove(b) print a [/code]

Я не знаток питона, но, судя по всему, если удаление происходит по значению, и remove удаляет все вхождения данного значения из списка, то код будет работать некорректно.

anonymous
()
Ответ на: комментарий от anonymous

не все значения из списка, а первое встретившееся. Но в данном случае это не имеет значения потому что все элементы списка уникальны.

ambivalentno
() автор топика
Ответ на: комментарий от nitz
a = [1,2,3,4,5]
while a : print a.pop(0), a #однако ;-)
AIv ★★★★★
()

from __future__ import print_function a = filter(lambda x: print(x), a)

хотя всё равно пистон - говно

anonymous
()
l = range(1, 6)
while l:
    print l.pop(0)
    print l
else:
    print 'voila!'

Не благодари. Тред не читал.

Virtuos86 ★★★★★
()
Ответ на: комментарий от anonymous

Нужно всегда стараться использовать for вместо while
Ибо он, в теории, должен быстрее исполняться.

deterok ★★★★★
()
Ответ на: комментарий от BattleCoder

да, таки да. Но потом я осознал что итераторы это прикольнее чем циклы и вообще без этого обошелся.

ambivalentno
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.