Don*_*Don 10 python duplicates
给定一个列表列表,我想确保没有两个列表具有相同的值和顺序.例如,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
Run Code Online (Sandbox Code Playgroud)
Jea*_*bre 11
你可以计算列表理解中的出现次数,将它们转换为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)
Run Code Online (Sandbox Code Playgroud)
结果:
{(1, 2, 4, 6, 10)}
Run Code Online (Sandbox Code Playgroud)
很简单,但由于反复调用,很多循环在引擎盖下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)
Run Code Online (Sandbox Code Playgroud)
结果:
[(1, 2, 4, 6, 10)]
Run Code Online (Sandbox Code Playgroud)
(只计算元组转换的子列表 - 修复散列问题 - 并使用列表理解生成重复列表,仅保留多次出现的项目)
现在,如果你只想检测到有一些重复的列表(没有打印它们),你可以
如果有一些重复,len是不同的:
routes_tuple = [tuple(x) for x in routes]
print(len(routes_tuple)!=len(set(routes_tuple)))
Run Code Online (Sandbox Code Playgroud)
或者,能够map在Python 3中使用是非常罕见的,所以提到:
print(len(set(map(tuple,routes))) != len(routes))
Run Code Online (Sandbox Code Playgroud)