6
votes

Python - comparer deux listes dans une compréhension

J'essaie de comprendre la manière dont les compréhensions fonctionnent.

Je voudrais faire boucler deux listes et comparer chacun pour trouver des différences. Si un ou plusieurs mots sont différents, je voudrais imprimer ce mot (s).

J'aimerais tout cela dans une belle ligne de code, raison pour laquelle je suis intéressé par des complexions.


0 commentaires

3 Réponses :


4
votes

Si vous souhaitez comparer deux listes pour les différences, je pense que vous souhaitez utiliser un définir code> strong> .

>>> [word for word in L1 if word not in L2] + [word for word in L2 if word not in L1]
['a', 'e']


2 commentaires

C'est une bonne suggestion et je l'utiliserai de manière défait. Mais dans ma quête pour en apprendre davantage sur les complètes, je devais donner ma petite tique à Überjesus ... à moins que je ne puisse donner plus d'un, n'ont pas essayé ça


Je crois comprendre que les éléments peuvent répéter et l'ordre est important. De cette façon, l'utilisation de définir ne produit pas de résultats corrects.



18
votes

Le faire dans "une belle ligne de code" est le golf du code et égaré. Rendez-le à la place.

[print(a, "is different from", b) for a, b in zip(list1, list2) if a!=b]


5 commentaires

Je suis d'accord, c'est plus facile à lire mais je fais de cette façon pour un peu de temps et je suis ennuyé de cela. Pas la méthode Zip Tho, merci de me montrer cela. Si ces voies plus courtes ... je pourrais aussi l'apprendre ... pourrait être utile


Non, il n'y a pas de moyen plus courte de faire cette comparaison. Les autres solutions ont une vue différente de la "différence". Ce qui est juste dépend de vous. Être ennuyé d'écrire un bon code pourrait ne pas être une bonne raison. ;)


Comme quelqu'un apprenant Python cette semaine, j'apprécie votre réponse et la clarté de votre code. Bon produit!


Cela fonctionne bien si les deux listes ont la même taille. Et si la liste A est très grande que la liste B?


Le 2e code SNIPPET est significativement différent de celui-ci construit une liste inutile de Aucun renvoyé par les appels d'impression - il s'agit d'un pythonic, la liste Comphrensions est destinée aux listes de construction et non à des appels procédales.



15
votes

Comme Kriegar suggéra d'utiliser des ensembles est probablement la solution la plus facile. Si vous avez absolument besoin d'utiliser la compréhension de la liste, j'utiliserais quelque chose comme ceci: xxx


0 commentaires