从包含特定字符的列表中删除元素

时间:2010-08-05 15:35:41

标签: python list data-structures

我想删除包含(或不包含)一组特定字符的列表中的所有元素,但是我正在遇到迭代列表并在我继续时删除元素的问题。下面给出两个几乎相同的例子。如您所见,如果应删除的两个元素直接相互跟随,则第二个元素不会被删除。

我确定在python中有一种非常简单的方法可以做到这一点,所以如果有人知道它,请帮助我 - 我正在制作整个列表的副本并迭代一个,并删除另一个中的元素。 ..我认为不是一个好的解决方案

>>> l
['1', '32', '523', '336']
>>> for t in l:
...     for c in t:
...         if c == '2':
...             l.remove(t)
...             break
...             
>>> l
['1', '523', '336']
>>> l = ['1','32','523','336','13525']
>>> for w in l:
...     if '2' in w: l.remove(w)
...     
>>> l
['1', '523', '336']

想出来:

>>> l = ['1','32','523','336','13525']
>>> [x for x in l if not '2' in x]
['1', '336']

我仍然想知道是否有任何方法可以在使用for x in l时将迭代设置回一组。

3 个答案:

答案 0 :(得分:52)

列表理解:

>>> l = ['1', '32', '523', '336']
>>> [ x for x in l if "2" not in x ]
['1', '336']
>>> [ x for x in l if "2" in x ]
['32', '523']

答案 1 :(得分:8)

如果我理解正确的话,

[x for x in l if "2" not in x]

可能会完成这项工作。

答案 2 :(得分:0)

你可能遇到的问题是你试图在t循环中循环修改序列。