从包含特定字符的列表中移除元素
我想从一个列表中删除所有包含(或不包含)特定字符的元素,但在遍历列表并删除元素时遇到了问题。下面有两个几乎相同的例子。你可以看到,如果要删除的两个元素是紧挨着的,第二个元素就不会被删除。
我相信在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”时,有没有办法让迭代回退一步。
4 个回答
5
除了@Matth提到的,如果你想把多个语句结合在一起,你可以这样写:
l = ['1', '32', '523', '336']
[ x for x in l if "2" not in x and "3" not in x]
# Returns: ['1']
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']
12
如果我理解得没错,
举个例子:
l = ['1', '32', '523', '336']
[x for x in l if "2" not in x]
# Returns: ['1', '336']
格式化字符串的例子:
l = ['1', '32', '523', '336']
stringVal = "2"
print(f"{[x for x in l if stringVal not in x]}")
# Returns: ['1', '336']
可能可以解决这个问题。
115
列表推导式:
l = ['1', '32', '523', '336']
[ x for x in l if "2" not in x ]
# Returns: ['1', '336']
[ x for x in l if "2" in x ]
# Returns: ['32', '523']
l = ['1', '32', '523', '336']
stringVal = "2"
print(f"{[ x for x in l if stringVal not in x ]}")
# Returns: ['1', '336']
print(f"{[ x for x in l if stringVal in x ]}")
# Returns: ['32', '523']