Найти - Пользователи
Полная версия: удалить элемент из списка по условию
Начало » Python для новичков » удалить элемент из списка по условию
1
EvgenKlim
Доброго времени суток!

Пишу такое условие

l=["dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2",
     "scout3-scout1", "scout1-scout4", "scout4-sscout", "sscout-super"]
print l
for i in l:   
   if i=="scout3-scout1": l.pop(l.index(i))
print l

Печатает все как нужно. 2й список без “scout3-scout1”

Если записать по другому то выдает синтаксическую ошибку:
l=["dr101-mr99", "mr99-out00", "dr101-out00", "scout1-scout2",
     "scout3-scout1", "scout1-scout4", "scout4-sscout", "sscout-super"]
print l
x=[l for i in l if i=="scout3-scout1" l.pop(l.index(i))]
print x

Через лямбда функцию тоже ничего не получается записать. Кто-н знает в чем ошибка? Спасибо!
FishHook
Ошибка классическая: удалять элементы списка в цикле нельзя.
py.user.next
>>> lst = ["dr101-mr99", "mr99-out00",
...        "dr101-out00", "scout1-scout2",
...        "scout3-scout1", "scout1-scout4",
...        "scout4-sscout", "sscout-super"]
>>> 
>>> lst = [i for i in lst if i != "scout3-scout1"]
>>> lst
['dr101-mr99', 'mr99-out00', 'dr101-out00', 'scout1-scout2', 'scout1-scout4', 'scout4-sscout', 'sscout-super']
>>>

EvgenKlim
l.pop(l.index(i))
lst.remove(i)
Budulianin
FishHook
Ошибка классическая: удалять элементы списка в цикле нельзя.

Нет. Просто на том месте, можно писать, только ещё одно условие или ещё один цикл, но не такое выражение l.pop(l.index(i)). Синтаксис comprehension таков.

И да. Удалять элементы списка в цикле можно, только осторожно.
dimy44
Можно удалять, но следить за смещением индекса, например
lst = ["dr101-mr99", "mr99-out00",  "dr101-out00", "scout1-scout2",  "scout3-scout1", "scout1-scout4",  "scout4-sscout", "sscout-super"]
deleted = 0
for i in range(len(lst)):
    if lst[i-deleted] == "scout3-scout1":
        del lst[i-deleted]
        deleted += 1
преимущество в том, что не создается новый список
FishHook
Budulianin
И да. Удалять элементы списка в цикле можно
А еще переходить дорогу на красный свет и заплывать за буйки.
4kpt_II
FishHook, дополню:
Превышать скорость, ездить без тормозов, не предохраняться, курить, пить ….
Budulianin
FishHook
4kpt_II

Для цикла без использования итератора, эти сравнения немного неуместны.
dimy44
Че, и курить уже нельзя?..
4kpt_II
dimy44
Я же не написал чего курить
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