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

Vid*_*dar 34 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']
Run Code Online (Sandbox Code Playgroud)

弄清楚了:

>>> l = ['1','32','523','336','13525']
>>> [x for x in l if not '2' in x]
['1', '336']
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*ttH 57

列表理解:

>>> 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']
Run Code Online (Sandbox Code Playgroud)


loe*_*org 8

如果我理解正确,

[x for x in l if "2" not in x]
Run Code Online (Sandbox Code Playgroud)

可能会做这个工作.


小智 5

除了@Matth之外,如果你想组合多个语句,你可以写:

l = ['1', '32', '523', '336']

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

# Returns: ['1']
Run Code Online (Sandbox Code Playgroud)

fString 示例

l = ['1', '32', '523', '336']

stringValA = "2"
stringValB = "3"

print(f"{[ x for x in l if stringValA not in x and stringValB not in x ]}")

# Returns: ['1']
Run Code Online (Sandbox Code Playgroud)