我正在尝试在一个列表中找到嵌套元组中的重复项。整个结构也是一个列表。如果有其他更好的组织方式可以解决我的问题 - 我很乐意知道,因为这是我一路上建立的东西。
每个列表中的第一个元素唯一地标识每个列表。
从对象“pairsList”中,我想找出哪些列表具有相同的元组。因此,我希望报告
输出结果可以是任何可迭代的内容,例如
我知道集合并在其他情况下使用它们删除列表中的重复项,但无法理解如何解决此问题。如果一个列表包含另一个列表中的任何元素,我可以像这样检查:
pairsList = [
[1, (11, 12), (13, 14)], #list1
[2, (21, 22), (23, 24)], #list2
[3, (31, 32), (13, 14)], #list3
[4, (43, 44), (21, 22)], #list4
]
每个列表中的第一个元素唯一地标识每个列表。
从对象“pairsList”中,我想找出哪些列表具有相同的元组。因此,我希望报告
list1
与list3
具有相同的元组(因为两者都有(13,14)
)。同样,list2
和list4
具有相同的元组(都有(21,22)
),需要报告。元组在列表中的位置并不重要(list2
和list4
都有(13,14)
,尽管元组在列表中的位置不同)。输出结果可以是任何可迭代的内容,例如
(1,3),(2,4)
或[1,3],[2,4]
。我感兴趣的是成对的列表。我知道集合并在其他情况下使用它们删除列表中的重复项,但无法理解如何解决此问题。如果一个列表包含另一个列表中的任何元素,我可以像这样检查:
list1 = [1, (11, 12), (13, 14)]
list2 = [3, (31, 32), (13, 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
defaultdict(set)
,然后对集合使用itertools.combinations
来获取所有这样的配对。例如,如果我们将[5, (11, 12), (21, 22)]
添加到pairList
中,那么组合可以帮助我们返回[(1, 3), (1, 5), (2, 4), (2, 5), (4, 5)]
。 - Ashwini Chaudharyv
,并且是combinations(v, 2)
。 - Ashwini Chaudhary== 2
和> 1
之间犹豫了一下(甚至编辑了一下),最终考虑到了名称pairs
。很高兴向您展示了字典推导式,您会喜欢使用它的。 - eumiro