web-dev-qa-db-fra.com

Vérifier si des éléments d'une liste sont dans une autre

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.

33
h1h1

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
66
David Alber

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.

14
vidit

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é

9
user1463110

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")
8
dansalmo

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.

6
colins44

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
1
Aman Madan