Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 8, 2016 12:14:02

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

удаление элемента из списка

print a
[{'c1':'qqq'},{'c2':'www'},{'c3':'eee'},{'c4':'rrr'},{'c5':'ttt'}]
print var
[0, 1, 2]
a = [i for i in a if i in var]
print a
[]
а должно быть [{'c4':'rrr'},{'c5':'ttt'}]
а если 
del a[i for i in var]
SyntaxError: invalid syntax

надеюсь понятно
подскажите варианты пожалуйста.

Отредактировано papuas (Июнь 8, 2016 21:27:37)

Офлайн

#2 Июнь 8, 2016 12:48:47

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

удаление элемента из списка

del i for i in var



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июнь 8, 2016 14:03:06

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

удаление элемента из списка

ZerG
del i for i in var

Отредактировано papuas (Июнь 8, 2016 14:03:53)

Офлайн

#4 Июнь 8, 2016 14:03:31

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

удаление элемента из списка

ZerG
del i for i in var
мне нужно из списка –> a удалить каждый i for i in var
a = [{'c1':'qqq'},{'c2':'www'},{'c3':'eee'},{'c4':'rrr'},{'c5':'ttt'}] 
var = [0,1,2]
желательно в одну строку

Отредактировано papuas (Июнь 8, 2016 14:04:26)

Офлайн

#5 Июнь 8, 2016 18:10:03

papuas
Зарегистрирован: 2015-06-19
Сообщения: 159
Репутация: +  6  -
Профиль   Отправить e-mail  

удаление элемента из списка

papuas
мне нужно из списка –> a удалить каждый i for i in var

a = [{'c1':'qqq'},{'c2':'www'},{'c3':'eee'},{'c4':'rrr'},{'c5':'ttt'}] 
var = [0,1,2]

желательно в одну строку
результат немного не тот
>>> a = [{'c1':'qqq'},{'c2':'www'},{'c3':'eee'},{'c4':'rrr'},{'c5':'ttt'}]
>>> var = [0,1,2]
>>> for i in var: del a[i]
>>> print a
[{'c2': 'www'}, {'c4': 'rrr'}]
или
>>> [a.pop(i) for i in var]
>>> print a
[{'c2': 'www'}, {'c4': 'rrr'}]

Отредактировано papuas (Июнь 8, 2016 18:19:45)

Офлайн

#6 Июнь 8, 2016 19:09:58

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

удаление элемента из списка

papuas
Ваша задача решается не удалением из списка, а созданием нового списка, на основе старого

a = [{'c1':'qqq'},{'c2':'www'},{'c3':'eee'},{'c4':'rrr'},{'c5':'ttt'}]
var = [0,1,2]
a = [el for index, el in enumerate(a) if index in var]
или так
a = [{'c1':'qqq'},{'c2':'www'},{'c3':'eee'},{'c4':'rrr'},{'c5':'ttt'}]
var = [0,1,2]
a = [a[i] for i in var]



Отредактировано FishHook (Июнь 8, 2016 19:42:39)

Офлайн

#7 Июнь 8, 2016 19:29:01

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

удаление элемента из списка

Ну или в две строки

for i in var:
    del a[i]



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#8 Июнь 8, 2016 19:36:00

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

удаление элемента из списка

ZerG
Ну или в две строки
Да нельзя так делать! Не получишь ты правильного результата удаляя из списка в цикле.
После того, как ты удалишь нулевой элемент, первый элемент станет нулевым, второй первым и так далее.
Поэтому, когда ты удаляешь последовательно 0, 1 и 2-й элементы, ты удалишь 0, 2 и 4-й.
Попробуй выполни свой код и увидишь, что он не работает.



Офлайн

#9 Июнь 8, 2016 19:38:43

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

удаление элемента из списка

Хм - таки да! Что-то сегодня я весь день вальта отбиваю!
Мало того в виду удаления будет смещен индекс и вызов индекса превышающего длину.
Век живи - век дурак. Спасибо!



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#10 Июнь 8, 2016 20:49:19

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

удаление элемента из списка

я правильно понял удалить из списка элементы с индексами заданными в списке var?
тогда мне кажется так и в одну строку

a = [ i for x,i in enumerate(a) if x not in var ]
>>> [{'c4': 'rrr'}, {'c5': 'ttt'}]

Отредактировано marvellik (Июнь 8, 2016 20:53:36)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version