Удалите элементы, поскольку Вы пересекаете список в Python [дубликат]

Откровенно говоря, это работает хорошо, и мне платят для записи этого. Это не запутано с маркетинговыми прихотями единственного поставщика, который управляет им. Меньше и меньше экспертов по C++ находятся на рынке, таким образом, мое значение увеличивается со временем. Я продолжу использовать его, пока рынок не станет неустойчивым.

11
задан Uli Köhler 5 January 2014 в 02:57
поделиться

4 ответа

Итерация по копии списка:

for c in colors[:]:
    if c == 'green':
        colors.remove(c)
19
ответ дан 3 December 2019 в 00:58
поделиться

Вы можете использовать функцию фильтрации:

>>> colors=['red', 'green', 'blue', 'purple']
>>> filter(lambda color: color != 'green', colors)
['red', 'blue', 'purple']
>>>
4
ответ дан 3 December 2019 в 00:58
поделиться

Лучший подход в Python - создать новый список, в идеале в listcomp, установив его как [:] старого, например:

colors[:] = [c for c in colors if c != 'green']

НЕ colors = , как можно предположить в некоторых ответах, - это только повторно связывает имя и в конечном итоге оставит некоторые ссылки на старое «тело» висящим; colors [:] = НАМНОГО лучше по всем параметрам; -).

28
ответ дан 3 December 2019 в 00:58
поделиться

или вы также можете сделать это

>>> colors = ['red', 'green', 'blue', 'purple']
>>> if colors.__contains__('green'):
...     colors.remove('green')
0
ответ дан 3 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: