加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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]].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读