【发布时间】:2014-03-06 09:21:31
【问题描述】:
这里有点python/编程新手,
我已经提出了 2 个嵌套 for 循环的代码,以测试第二个循环的元素是否与第一个列表中的元素部分(或完全)匹配,如果是,则将这些元素从第一个列表。代码如下:
>>> lst = ["my name is Bob Jenkins", "Tommy Cooper I am", "I be Bazil", "I Tarzan"]
>>> names = ["Bob", "Tarzan"]
>>> for l in lst:
for n in names:
if n in l:
lst.remove(l)
>>> print lst
['Tommy Cooper I am', 'I be Bazil']
这里的问题是我实际上并不想修改lst,而是创建一个新列表。因此,列表理解抬起了头。但是,我无法弄清楚列表理解来实现这一点。我试过[i for i in lst for n in names if n not in i] 但这不起作用。当然.remove 方法不适用于列表理解。在过去的一个小时里,我一直在困惑,但什么也想不出来。
有什么想法吗?
【问题讨论】:
-
这不是对您问题的回答,而是对您当前解决方案的评论:您不应该在迭代列表时修改列表(例如删除元素)。您可以遍历它的副本,例如:for l in lst[:]: lst.remove(l)
-
感谢您提供的信息@Lazarus - 非常有帮助
-
我发现所有 3 个答案(到目前为止)都同样有用,因此我无法在这方面选择它们作为最佳答案。但是,我会接受darkryder,原因很简单,他/她需要一些积分:-)
-
它们几乎是等价的。
标签: python list for-loop list-comprehension