删除包含特定字符的列表中的元素
我想删除包含(或不包含)一组特定字符的列表中的所有元素,但是我遇到了迭代列表中的问题以及将元素作为我一直在前进。下面给出了两个几乎相同的例子。正如你所看到的,如果应该删除的两个元素直接跟在另一个之后,那么第二个元素不会被删除。删除包含特定字符的列表中的元素
我确定在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']
仍想知道是否有任何方式使用中长x时设置迭代回一组虽然。
列表解析:
>>> 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']
如果我理解正确的话,
[x for x in l if "2" not in x]
可能做的工作。
与flake8风格不兼容。我收到一个错误:'SashaListComprehension.py:70:45:E713成员资格测试应该'不在'。对于flake8,我们需要“if”2“not”作为[** MattH答案**](https://stackoverflow.com/a/3416473/5951529),而不是“如果不是”“2”'。谢谢。 – 2018-01-01 08:47:11
@СашаЧерных,谢谢,我已经编辑了答案 – loevborg 2018-03-01 19:46:55
您可能遇到的问题是,您正在尝试修改序列l,同时您在循环中对其进行循环。
Dupe-ish:http://stackoverflow.com/questions/1207406/remove-items-from-a-list-while-iterating-in-python – bhangm 2010-08-05 15:43:22
请接受帮助您解决问题的答案,而不是添加“解决”的标题。点击答案旁边的绿色复选标记以接受答案。 (如果没有答案帮助你,那么请添加你自己的答案,解释你是如何解决问题的。)谢谢,欢迎来到Stack Overflow。 – 2010-08-05 15:48:10