获取 2 个列表之间的差异(列表有重复的值)[duplicate]

Get the difference between 2 lists (the lists has duplicated values) [duplicate]

提问人:soapcmd 提问时间:11/15/2023 最后编辑:mkrieger1soapcmd 更新时间:11/15/2023 访问量:64

问:

假设我有

list1 = [1, 2, 2, 3, 3]
list2 = [2, 2, 3]

所以区别应该是.[1, 3]

set(list1) - set(list2)忽略重复的值,这不是我想要的。

与 相同。[i for i in list1 if i not in list2]

Python 列表

评论

0赞 user8408080 11/15/2023
所以你要检查,是否是子列表,如果是,获取相应的索引?list2list1
0赞 soapcmd 11/15/2023
@user8408080,list2 也可以是 [2, 2, 3,4]

答:

-1赞 ayekaunic 11/15/2023 #1

溶液

def list_difference(list1, list2):
    difference = []
    for item in list1:
        if item not in list2:
            difference.append(item)
        else:
            list2.remove(item)
    return difference

list1 = [1, 2, 2, 3, 3]
list2 = [2, 2, 3]
print(list_difference(list1, list2))

这将为您提供输出:

[1, 3]

解释:

此解决方案的工作原理是循环访问 list1 中的每个项目。如果某个项目不在 list2 中,则会将其添加到差异列表中。如果某个项目位于 list2 中,则会将其从 list2 中删除,以防止多次计数。此方法考虑 list1 和 list2 中的重复项。

因此,对于给定的列表 list1 = [1, 2, 2, 3, 3] 和 list2 = [2, 2, 3],项目 2 在 list1 中重复两次,在 list2 中重复两次。当我们在 list1 中找到前 2 个时,我们会检查它是否在 list2 中。既然是这样,我们就把它从 list2 中删除,然后转到 list1 中的下一项。我们这样做,直到我们在 list1 中找到不在 list2 中的 2,此时我们将其添加到差异列表中。同样的逻辑也适用于第 3 项。

结果,我们得到的列表差值为 [1, 3]。