从包含特定字符的列表中删除元素[重复]
Posted
技术标签:
【中文标题】从包含特定字符的列表中删除元素[重复]【英文标题】:Removing elements from a list containing specific characters [duplicate] 【发布时间】:2011-03-25 21:20:53 【问题描述】:我想删除列表中包含(或不包含)一组特定字符的所有元素,但是我遇到了迭代列表和删除元素时遇到的问题。下面给出了两个几乎相同的例子。如您所见,如果两个应该删除的元素直接紧随其后,则第二个元素不会被删除。
我确信在 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 时是否有任何方法可以将迭代设置回一组。
【问题讨论】:
【参考方案1】:列表推导:
>>> 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']
【讨论】:
MattH,很抱歉,是否可以这样做if "1" or "2" or "3" not in x
。也就是说,等价于[ x for x in l if "1" not in x ]
+ [ x for x in l if "2" not in x ]
+ [ x for x in l if "3" not in x ]
,但更短?谢谢。
@СашаЧерных 你在描述[x for x in l if any(y not in x for y in '123')]
,但我认为你实际上想要[x for x in l if all(y not in x for y in '123')]
【参考方案2】:
如果我理解正确的话,
[x for x in l if "2" not in x]
或许能胜任。
【讨论】:
【参考方案3】:除了@Matth,如果你想组合多个语句你可以写:
>>> l = ['1', '32', '523', '336']
>>> [ x for x in l if "2" not in x and "3" not in x]
['1']
【讨论】:
【参考方案4】:您可能遇到的问题是,您尝试修改序列 l 的同时,在 for t 循环中对其进行循环。
【讨论】:
以上是关于从包含特定字符的列表中删除元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Python 3,如果列表中包含特定的东西,如何删除部分元素3 [重复]
从一个列表中删除元素如果不包含在另一个列表中。 C# [重复]