python – 在带有元组的列表列表中查找重复项
发布时间:2020-12-20 11:40:20 所属栏目:Python 来源:网络整理
导读:我试图找到嵌套在列表中的元组内的重复项.整个建筑也是一个清单.如果有其他更好的方法来组织这个让我的问题得到解决 – 我很高兴知道,因为这是我在路上建立的东西. pairsList = [ [1,(11,12),(13,14)],#list1 [2,(21,22),(23,24)],#list2 [3,(31,32),#list3
我试图找到嵌套在列表中的元组内的重复项.整个建筑也是一个清单.如果有其他更好的方法来组织这个让我的问题得到解决 – 我很高兴知道,因为这是我在路上建立的东西.
pairsList = [ [1,(11,12),(13,14)],#list1 [2,(21,22),(23,24)],#list2 [3,(31,32),#list3 [4,(43,44),22)],#list4 ] 每个列表中的第一个元素唯一标识每个列表. 从这个对象pairList,我想找出哪些列表具有相同的元组.所以我想报告list1与list3具有相同的元组(因为它们都有(13,14).同样,list2和list4具有相同的元组(都有(21,22))并且需要报告.列表中的元组无关紧要(list2和list4都有(13,14),即使元组中列表中的位置不同). 输出结果可以是稍后可迭代的任何内容,例如(1,3),(2,4)或[1,3],[2,4].这是我感兴趣的对. 我知道集合,并在其他情况下使用它们删除列表中的重复项,但无法理解如何解决此问题.如果一个列表包含其他列表中的任何元素,我可以像这样检查: list1 = [1,14)] list2 = [3,14)] print not set(list1).isdisjoint(list2) >>>True 因此,下面的代码让我知道哪些列表与第一个列表具有相同的元组.但是在所有列表上执行此操作的正确方法是什么? counter = 0 for pair in pairsList: list0 = pairsList[0] iterList = pairsList[counter] if not set(list0).isdisjoint(iterList): print iterList[0] #print list ID counter += 1 解决方法
每个列表中的第一个元素唯一标识每个列表.
好的,然后让我们先把它转换为dict: d = {x[0]: x[1:] for x in pairsList} # d: {1: [(11,2: [(21,3: [(31,4: [(43,22)]} 让我们索引整个数据结构: index = {} for k,vv in d.iteritems(): for v in vv: index.setdefault(v,[]).append(k) 现在索引是: {(11,12): [1],14): [1,22): [2,4],24): [2],32): [3],44): [4]} 输出结果可以是稍后可迭代的任何内容,4].这是我感兴趣的对. pairs = [v for v in index.itervalues() if len(v) == 2] 返回[[1,4]]. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |