比较两个列表并过滤掉重复项

2024-04-28 11:53:13 发布

您现在位置:Python中文网/ 问答频道 /正文

也许这只是因为精神疲惫,但我一辈子都搞不懂,即使我在另一个程序上使用了相同的原理。。你知道吗

我有两张单子:

compare_list = [0,1,1,2,3,3,4,7,5,8,9,9]

master_list = [0,1,2,3,4,8,9]

正如您所看到的,两个列表都包含一些相同的数字,并且在compare\列表中有重复的值。。你知道吗

我要完成的是比较两个列表,如果在主列表中找到,则从比较列表中删除。你知道吗

这是我目前掌握的代码:

for x in compare_list:
    for y in master_list:
        if x == y:
            compare_list.remove(x)

结果是,我确实从比较列表中删除了一些项目,但仍保留了一些重复项。。你知道吗

输出:

  print(compare_list)

 [1,3,7,5,9]

我怎样才能正确地从主目录中删除所有重复的实例。所以比较列表只包含在主列表中找不到的数字?你知道吗


Tags: 项目代码in程序master精神列表for
3条回答

正如python官方文档所建议的列表.删除 “从列表中删除值为x的第一项。如果没有这样的项,则为错误。”

因此,如果您的比较列表中有重复项,则不会删除它们。你知道吗

如果您已经有一个列表,并且需要从中删除重复项,我认为您需要将列表转换为一个集合:

compare_list = [1,2,2,3,4,5,5,5]
my_set = set(compare_list)

如果需要过滤比较列表删除某些特定元素,可以在使用set的方法删除将列表转换为一个集合后执行此步骤。你知道吗

compare_list = [x for x in compare_list if x not in master_list]

如果master_list有多个项,那么使用set会更有效

master_set = set(master_list)
compare_list = [x for x in compare_list if x not in master_set]

似乎是filter的直接用例

>>> compare_list = [0,1,1,2,3,3,4,7,5,8,9,9]
>>> master_list = [0,1,2,3,4,8,9]
>>> filter(lambda i: i not in master_list, compare_list)
[7, 5]

相关问题 更多 >