你可以计算列表理解中的出现次数,将它们转换为a,tuple
这样你就可以散列并应用unicity:
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)))
或者,能够map
在Python 3中使用是非常罕见的,所以提到:
print(len(set(map(tuple,routes))) != len(routes))