Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 11, 2014 08:05:12

EvgenKlim
Зарегистрирован: 2014-05-12
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

удалить элемент из списка по условию

Доброго времени суток!

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

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

Через лямбда функцию тоже ничего не получается записать. Кто-н знает в чем ошибка? Спасибо!

Офлайн

#2 Июнь 11, 2014 08:07:59

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

удалить элемент из списка по условию

Ошибка классическая: удалять элементы списка в цикле нельзя.



Офлайн

#3 Июнь 11, 2014 11:56:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9929
Репутация: +  856  -
Профиль   Отправить e-mail  

удалить элемент из списка по условию

>>> 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)



Отредактировано py.user.next (Июнь 11, 2014 11:59:01)

Офлайн

#4 Июнь 11, 2014 21:47:46

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

удалить элемент из списка по условию

FishHook
Ошибка классическая: удалять элементы списка в цикле нельзя.

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

И да. Удалять элементы списка в цикле можно, только осторожно.



Отредактировано Budulianin (Июнь 11, 2014 21:49:16)

Офлайн

#5 Июнь 12, 2014 07:04:17

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

удалить элемент из списка по условию

Можно удалять, но следить за смещением индекса, например

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
преимущество в том, что не создается новый список

Офлайн

#6 Июнь 12, 2014 11:41:26

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

удалить элемент из списка по условию

Budulianin
И да. Удалять элементы списка в цикле можно
А еще переходить дорогу на красный свет и заплывать за буйки.



Офлайн

#7 Июнь 12, 2014 11:51:15

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

удалить элемент из списка по условию

FishHook, дополню:
Превышать скорость, ездить без тормозов, не предохраняться, курить, пить ….

Офлайн

#8 Июнь 12, 2014 15:01:41

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

удалить элемент из списка по условию

FishHook
4kpt_II

Для цикла без использования итератора, эти сравнения немного неуместны.



Офлайн

#9 Июнь 12, 2014 17:18:20

dimy44
От: Евпатория
Зарегистрирован: 2012-04-21
Сообщения: 463
Репутация: +  42  -
Профиль  

удалить элемент из списка по условию

Че, и курить уже нельзя?..

Офлайн

#10 Июнь 12, 2014 17:59:00

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

удалить элемент из списка по условию

dimy44
Я же не написал чего курить

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version