如何从包含在另一个列表中的项目中找到的单词的列表中删除项目[重复]

发布于 2021-01-29 14:11:02

这个问题已经在这里有了答案

循环“忘记”以删除一些项目[重复] (10个答案)

6年前关闭。

我想从列表“ a”中删除项目,其中列表“ b”包含在列表“ a”中找到带有单词的项目

a = ['one two three', 'four five six', 'seven eight nine']
b = ['two', 'five six']

结果应为:

a = ['seven eight nine']

这是因为在列表“ a”的项目中找到了单词“二”和“五六”。

这是我尝试解决的方法:

for i in a:
    for x in b:
        if x in i:
            a.remove(i)

返回:

print a
['four five six', 'seven eight nine']

为什么这不起作用,如何解决此问题?

谢谢。

关注者
0
被浏览
128
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    遍历列表时,请勿修改列表。这样做会产生不良的副作用,例如循环跳过项目。

    通常,在Python中,应避免循环一次在列表中添加和删除元素的循环。通常,这些循环可以用更多惯用的列表理解代替。

    [sa for sa in a if not any(sb in sa for sb in b)]
    

    值得一提的是,按书面方式修复循环的一种方法是遍历列表的 副本 ,以使循环不受原始更改的影响。

    for i in a[:]:
        for x in b:
            if x in i:
                a.remove(i)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看