2016-10-24 2 views
0

Как удалить из списка в python?python удалить текст из списка

a=[('hello','home','today','cry'),('hello','saturday','today','cry'),('bye','home','today','cry')] 

если находка 'Субботы' удалить все ('hello','saturday','today','cry')

так что я

a=[('hello','home','today','cry'),('bye','home','today','cry')] 

благодаря

ответ

6

Используйте список постижение с фильтром:

>>> [tup for tup in a if 'saturday' not in tup] 
[('hello', 'home', 'today', 'cry'), ('bye', 'home', 'today', 'cry')] 

Ссылка:

List comprehensions

+0

спасибо, что это работает! – Silvio

1

Я придерживаюсь требованию OP о снятии элемента из списка (не создавая новый список). Итак, list comprehension - не предложенный подход. В результате может быть достигнут с помощью for цикла как:

>>> for i, sublist in enumerate(list(a)): # list(a) to iterate over the copy of a 
...  if 'saturday' in sublist: 
...   del a[i] 
... 
>>> a 
[('hello', 'home', 'today', 'cry'), ('bye', 'home', 'today', 'cry')] 

Вместо Перебор a, я итерацию list(a), потому что delating объекта из списка, на котором вы итерацию результата в неожиданных результатов.


В случае OK, чтобы создать новый список и обновление с оригиналом, кроме списка понимания подхода (который уже упоминался), вы можете использовать filter() как:

>>> list(filter(lambda x: 'saturday' not in x, a)) 
[('hello', 'home', 'today', 'cry'), ('bye', 'home', 'today', 'cry')] 
+0

Почему бы не просто установить 'a' равным пониманию списка? Это не пифонический способ сделать это. –

+0

@NickA: согласно OP, он упомянул * «удалить из списка» *. * List Consrehension * - это создание нового списка и его замена оригиналом. Но я согласен с тем, что понимание раздела * больше pythonic * для этого –

0

Проверните в в список списков, а затем проверить каждый из подсписков для «Субботы»

a=[('hello','home','today','cry'),('hello','saturday','today','cry'),('bye','home','today','cry')] 
a=list(a) 
for x in range (len(a)-1,-1,-1): 
    if 'saturday' in list(a[x]): 
      a.pop(x) 

Это дает = [(«привет», «дом», «сегодня» , 'cry'), ('bye', 'home', 'today', 'cry')]

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