(无意中)迭代列表时跳过项目

hoy*_*and 3 python list

我有一个列表,我想从中删除未出现在另一个列表中的项目.我尝试过以下方法:

for w in common:
        for i in range(1,n):
            if not w in words[i]:
                common.remove(w)
Run Code Online (Sandbox Code Playgroud) 但是,这无法删除某些项目.添加打印语句
for w in common:
        for i in range(1,n):
                        print w
            if not w in words[i]:
                print w
                common.remove(w)
Run Code Online (Sandbox Code Playgroud)导致一些人永远不会被打印出来.关于发生了什么的任何想法?我认为答案很简单,我只是没有足够的Python知识,但我完全没有想法.

g.d*_*d.c 8

我想你可以通过以下方式简化你的陈述:

filtered = filter(lambda x: x in words, common)
Run Code Online (Sandbox Code Playgroud)

这是检查每个元素的共同点,因为它存在于单词中并基于它进行删除.你可能需要尝试x not in words取决于你想要的结果,但我认为应该接近.

我想添加另一种方法,也可能会接近,但我需要查看初始列表的示例以完全测试它.

filtered = [x for x in common if x in words]
Run Code Online (Sandbox Code Playgroud)

- 编辑 - 我在列表理解中向后调整了语法,但在看到评论后就抓住了它.谢谢!

  • 好,但我更喜欢`filtered = [x for x in common if x in words]`或`filtered = filter(words .__ contains _,common)`或者使用`operator.contains`而不是lambda在这种情况下.可能是第一个. (2认同)