gpt4 book ai didi

python - 如何找出列表列表中是否有重复项

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:41 25 4
gpt4 key购买 nike

所以我现在正在学习计算机科学入门类(class),我想知道如何检查多个列表中是否有重复项。我已经阅读了这些答案:

How can I compare two lists in python and return matchesHow to find common elements in list of lists?

但是,它们并不是我要找的。比如说我有这个列表列表:

list_x = [[66,76], 
[25,26,27],
[65,66,67,68],
[40,41,42,43,44],
[11,21,31,41,51,61]]

有两组重复项(66 和 41),尽管这对我来说并不重要。有没有办法找到重复项是否存在?我正在寻找的是,如果有重复项,该函数将返回 True(或 False,具体取决于我想对列表执行的操作)。我的印象是我应该使用集合(我们还没有了解它所以我在互联网上查找)、使用 for 循环或编写我自己的函数。如果我需要编写自己的函数,请告诉我,我会在今天晚些时候尝试编辑!

最佳答案

一个非常简单的解决方案是使用 list comprehension首先展平列表,然后使用 setlen一起测试是否有重复项:

>>> list_x = [[66,76],
... [25,26,27],
... [65,66,67,68],
... [40,41,42,43,44],
... [11,21,31,41,51,61]]
>>> flat = [y for x in list_x for y in x]
>>> flat # Just to demonstrate
[66, 76, 25, 26, 27, 65, 66, 67, 68, 40, 41, 42, 43, 44, 11, 21, 31, 41, 51, 61]
>>> len(flat) != len(set(flat)) # True because there are duplicates
True
>>>
>>> # This list has no duplicates...
... list_x = [[1, 2],
... [3, 4, 5],
... [6, 7, 8, 9],
... [10, 11, 12, 13],
... [14, 15, 16, 17, 18]]
>>> flat = [y for x in list_x for y in x]
>>> len(flat) != len(set(flat)) # ...so this is False
False
>>>

但是请注意,如果 list_x 很大,这种方法会有些慢。如果性能是一个问题,那么您可以使用惰性方法,它利用 generator expression , any , 和 set.add:

>>> list_x = [[66,76],
... [25,26,27],
... [65,66,67,68],
... [40,41,42,43,44],
... [11,21,31,41,51,61]]
>>> seen = set()
>>> any(y in seen or seen.add(y) for x in list_x for y in x)
True
>>>

关于python - 如何找出列表列表中是否有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22923084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com