Python 在两个元组列表中查找交集,而不考虑元组顺序

Python 在两个元组列表中查找交集,而不考虑元组顺序,python,list,tuples,intersection,Python,List,Tuples,Intersection,我有两个元组列表 listA = [('1','2'),('3','4'),('5','6')] listB = [('2','1'),('7','8')] 我想找到它们的交集,即使第二个列表中元组的顺序不同 因此,对于上面的例子: intersection = [('1','2')] 交叉点应该返回上面的元组,尽管它在listB中的顺序不同 如何用python以最有效的方式实现这一点?因为我的列表中的每个元素都有大约2000个元组。您可以对列表中的每个元素进行排序,将它们转换为元组,然后将

我有两个元组列表

listA = [('1','2'),('3','4'),('5','6')]
listB = [('2','1'),('7','8')]
我想找到它们的交集,即使第二个列表中元组的顺序不同

因此,对于上面的例子:

intersection = [('1','2')]
交叉点应该返回上面的元组,尽管它在listB中的顺序不同


如何用python以最有效的方式实现这一点?因为我的列表中的每个元素都有大约2000个元组。

您可以对列表中的每个元素进行排序,将它们转换为元组,然后将列表转换为集合,并检查集合的交集:

set(
    [
        tuple(sorted(elem))
        for elem in listA
    ]
) & set(
    [
        tuple(sorted(elem))
        for elem in listB
    ]
)
返回:

{('1','2')}


请注意,这假定元组中存在唯一性(即没有元组
('1','1')
)。

1。请尝试在列表中对元组进行排序

2.将列表转换为集合

3.打印集合的交集

listA = [('1','2'),('3','4'),('5','6')]
listB = [('2','1'),('7','8')]
for i, j in enumerate(listA):
    listA[i] = tuple(sorted(j))
for i, j in enumerate(listB):
    listB[i] = tuple(sorted(j))
listA=set(listA)
listB=set(listB)
print(list(listA.intersection(listB)))
输出:


如何获取返回格式为[('1','2')]的元组列表,您可以执行
[结果中元素的元组(元素)]
listA = [('1','2'),('3','4'),('5','6')]
listB = [('2','1'),('7','8')]
for i, j in enumerate(listA):
    listA[i] = tuple(sorted(j))
for i, j in enumerate(listB):
    listB[i] = tuple(sorted(j))
listA=set(listA)
listB=set(listB)
print(list(listA.intersection(listB)))
[('1', '2')]