2016-08-31 2 views
0

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

Например, если у меня есть 2 списка a = [1,3,5,7,10] и b = [2,4] Я хочу, чтобы все элементы из a, которые не в индексе, соответствующем номеру в b.

Теперь я попытался использовать y = [a[x] for x not in b], но это создает SyntaxError.

y = [a[x] for x in b] прекрасно работает и сохраняет только точные элементы, которые я хочу удалить.

Как я могу это достичь? И на стороне примечания, это хороший способ сделать это, или я должен использовать del?

+5

Вы имеете в виду это? '[x для i, x в перечислении (a), если i не в b]' – khelwood

+0

и да, это и нет, вы не должны;) – georg

+0

'in' является частью синтаксиса понимания списка, in', и поэтому его нельзя просто заменить на 'not in'. – chepner

ответ

6

Вы можете использовать enumerate() и посмотреть индексы в b:

>>> a = [1, 3, 5, 7, 10] 
>>> b = [2, 4] 
>>> [item for index, item in enumerate(a) if index not in b] 
[1, 3, 7] 

Обратите внимание, что для улучшения времени поиска, лучше иметь b как набор вместо списка. Lookups into sets are O(1) on average в то время как в списке - O(n), где n - это длина списка.

-1

после этого:

y = [a[x] for x in b] 

просто добавить:

for x in y: 
    a.remove(x) 

, то вы в конечном итоге с раздели списка в

+1

'remove' удаляет первое вхождение элемента, а не тот, который вы хотите удалить. – chepner

1

Угадайте вы ищете Somthing как:

[ x for x in a if a.index(x) not in b ] 

Или, используя фильтр:

filter(lambda x : a.index(x) not in b , a) 
0

Попробуйте это будет работать

[j for i,j in enumerate(a) if i not in b ] 

 Смежные вопросы

  • Нет связанных вопросов^_^