gpt4 book ai didi

python - 检查列表是否有重复列表

转载 作者:太空狗 更新时间:2023-10-29 18:22:41 25 4
gpt4 key购买 nike

给定一个列表列表,我想确保没有两个列表具有相同的值和顺序。例如 my_list = [[1, 2, 4, 6, 10], [12, 33, 81, 95, 110], [1, 2, 4, 6, 10]]应该返回重复列表的存在,即 [1, 2, 4, 6, 10]

我使用了 while 但它并没有像我想要的那样工作。有人知道如何修复代码吗:

routes = [[1, 2, 4, 6, 10], [1, 3, 8, 9, 10], [1, 2, 4, 6, 10]]
r = len(routes) - 1
i = 0
while r != 0:
if cmp(routes[i], routes[i + 1]) == 0:
print "Yes, they are duplicate lists!"
r -= 1
i += 1

最佳答案

您可以计算列表推导中的出现次数,将它们转换为元组,以便您可以散列并应用唯一性:

routes = [[1, 2, 4, 6, 10], [1, 3, 8, 9, 10], [1, 2, 4, 6, 10]]
dups = {tuple(x) for x in routes if routes.count(x)>1}

print(dups)

结果:

{(1, 2, 4, 6, 10)}

足够简单,但由于重复调用 count 而在幕后有很多循环。还有另一种涉及散列但复杂度较低的方法是使用 collections.Counter:

from collections import Counter

routes = [[1, 2, 4, 6, 10], [1, 3, 8, 9, 10], [1, 2, 4, 6, 10]]

c = Counter(map(tuple,routes))
dups = [k for k,v in c.items() if v>1]

print(dups)

结果:

[(1, 2, 4, 6, 10)]

(只需计算元组转换的子列表 - 修复散列问题 - 并使用列表理解生成重复列表,仅保留出现不止一次的项目)

现在,如果您只想检测是否有一些重复列表(不打印它们),您可以

  • 将列表列表转换为元组列表,以便您可以将它们散列到一个集合中
  • 比较列表的长度与集合的长度:

如果有一些重复,len 是不同的:

routes_tuple = [tuple(x) for x in routes]    
print(len(routes_tuple)!=len(set(routes_tuple)))

或者,能够在 Python 3 中使用 map 非常罕见,因此:

print(len(set(map(tuple,routes))) != len(routes))

关于python - 检查列表是否有重复列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41809663/

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