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)))