我想要删除列表中包含特定字符集(或不包含)的所有元素,但是在迭代列表并删除元素时遇到了问题。下面给出了两个几乎相同的例子。正如您所看到的,如果应该被删除的两个元素直接跟随在一起,则第二个元素不会被删除。
我确信在Python中有一种非常简单的方法来做到这一点,所以如果有人知道,请帮帮我 - 我目前正在复制整个列表,并迭代其中一个,在另一个中删除元素...我认为这不是一个好的解决方案。
我理解了:
我确信在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时,是否有任何方法可以将迭代设置回上一组?
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')]
。 - wjandrea