从包含特定字符的列表中删除元素[重复]

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 列表中删除元素,直到找到特定字符

Python 3,如果列表中包含特定的东西,如何删除部分元素3 [重复]

从一个列表中删除元素如果不包含在另一个列表中。 C# [重复]

一道Python练习题引发的,一个知识点的探讨:删除列表中特定元素的几种方法

在 Python 中,如何从列表中删除包含某些类型字符的任何元素?