J'ai deux listes de tuples
intersection = [('1','2')]
Je veux trouver leur intersection même si l'ordre du tuple dans la deuxième liste est différent.
Donc, pour l'exemple ci-dessus:
listA = [('1','2'),('3','4'),('5','6')]
listB = [('2','1'),('7','8')]
l'intersection doit renvoyer le tuple ci-dessus bien qu'il ne soit pas dans le même ordre dans listB
Comment puis-je faire cela en python de la manière la plus efficace? car chacun de ma liste contient environ 2000 tuples.
3 Réponses :
Vous pouvez trier chaque élément des listes, les convertir en tuples, puis convertir les listes en ensembles et vérifier l'intersection des ensembles:
set(
[
tuple(sorted(elem))
for elem in listA
]
) & set(
[
tuple(sorted(elem))
for elem in listB
]
)
renvoie:
{ ('1', '2')}
>>> set(map(frozenset, listA)) & set(map(frozenset, listB))
{frozenset({'1', '2'})}
Note that this assumes uniqueness in the tuples (i.e. there's no tuple ('1', '1')).
comment l'obtenir renvoie une liste de tuples de format [('1', '2')]
Vous pouvez faire [tuple (élément) pour l'élément dans le résultat] .
1.Essayez de trier les tuples dans la liste.
2.Convertissez les listes en ensembles.
3.Imprimez l'intersection des ensembles.
[('1', '2')]
Sortie:
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)))