J'essaie de comparer deux listes et d'imprimer simplement un message si l'une des valeurs de la première liste se trouve dans la deuxième liste.
def listCompare():
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if list1 in list2:
print("Number was found")
else:
print("Number not in list")
Dans cet exemple, je veux que if
soit évalué à True
car 5 se trouve dans les deux listes. Cela ne fonctionne pas et je ne suis pas sûr du moyen le plus simple de comparer les deux listes.
Vous pouvez résoudre ce problème de nombreuses façons. Une qui est assez simple à comprendre consiste à utiliser simplement une boucle.
def comp(list1, list2):
for val in list1:
if val in list2:
return True
return False
Une méthode plus compacte consiste à utiliser map
et reduce
:
reduce(lambda v1,v2: v1 or v2, map(lambda v: v in list2, list1))
Mieux encore, le reduce
peut être remplacé par any
:
any(map(lambda v: v in list2, list1))
Vous pouvez également utiliser des ensembles:
len(set(list1).intersection(list2)) > 0
Il y a différentes manières. Si vous voulez juste vérifier si une liste contient un élément de l'autre liste, vous pouvez le faire.
not set(list1).isdisjoint(list2)
Je crois que l’utilisation de isdisjoint
est meilleure que intersection
pour Python 2.6 et plus.
Il existe une fonction intégrée pour comparer les listes:
Voici la syntaxe de la méthode cmp () -
cmp(list1, list2)
#!/usr/bin/python
list1, list2 = [123, 'xyz'], [123, 'xyz']
print cmp(list1,list2)
Lorsque nous courons au-dessus du programme, il produit le résultat suivant -
0
Si le résultat est une égalité, ce qui signifie que 0 est renvoyé
Votre approche originale peut fonctionner avec une compréhension de liste:
def listCompare():
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if [item for item in list1 if item in list2]:
print("Number was found")
else:
print("Number not in list")
Vous pouvez modifier les listes en ensembles, puis comparer les deux en utilisant la fonction &. par exemple:
list1 = [1, 2, 3, 4, 5]
list2 = [5, 6, 7, 8, 9]
if set(list1) & set(list2):
print "Number was found"
else:
print "Number not in list"
L'opérateur "&" donne le point d'intersection entre les deux ensembles. S'il y a une intersection, un ensemble avec les points d'intersection sera retourné. S'il n'y a pas de points d'intersection, un ensemble vide sera retourné.
Lorsque vous évaluez un ensemble/liste/dict/Tuple vide avec l'opérateur "if" dans Python, la valeur booléenne False est renvoyée.
J'ai écrit le code suivant dans l'un de mes projets. Fondamentalement, il compare chaque élément individuel de la liste. N'hésitez pas à l'utiliser si cela répond à vos besoins.
def reachedGoal(a,b):
if(len(a)!=len(b)):
raise ValueError("Wrong lists provided")
for val1 in range(0,len(a)):
temp1=a[val1]
temp2=b[val1]
for val2 in range(0,len(b)):
if(temp1[val2]!=temp2[val2]):
return False
return True