188 votes

Comment vérifier si tous les éléments suivants se trouvent dans une liste ?

J'ai découvert qu'il existe une question connexe sur la manière de déterminer si au moins un élément existe dans une liste :
Comment vérifier si l'un des éléments suivants se trouve dans une liste ?

Mais quelle est la meilleure façon de savoir si tous les éléments d'une liste existent ?

En cherchant dans la documentation, j'ai trouvé cette solution :

>>> l = ['a', 'b', 'c']
>>> set(['a', 'b']) <= set(l)
True
>>> set(['a', 'x']) <= set(l)
False

Une autre solution serait la suivante :

>>> l = ['a', 'b', 'c']
>>> all(x in l for x in ['a', 'b'])
True
>>> all(x in l for x in ['a', 'x'])
False

Mais ici, vous devez taper davantage.

Existe-t-il d'autres solutions ?

3voto

Johann Lau Points 95

Une autre solution serait la suivante :

l = ['a', 'b', 'c']
potential_subset1 = ['a', 'b']
potential_subset2 = ['a', 'x']
print(False not in [i in l for i in potential_subset1]) # True
print(False not in [i in l for i in potential_subset2]) # False

Ce qui rend ma solution géniale, c'est qu'il est possible d'écrire des phrases d'une ligne en mettant les listes en ligne.

1voto

Jundullah Points 115

Voici un exemple de l'utilisation d'une expression lambda :

issublist = lambda x, y: 0 in [_ in x for _ in y]

0voto

Emirhan Özlen Points 348

Syntaxe courte

J'ai découvert une syntaxe très lisible en expérimentant l'interpréteur Python.

>>> my_list = [1, 2, 3, 4, 5]
>>> (6 or 7) in my_list
False
>>> (2 or 6) in my_list
True
>>> (2 and 6) in my_list
False
>>> (2 and 5) in my_list
True

Liste des éléments à rechercher

Si vous avez une longue liste d'objets à rechercher, contenue dans un sub_list variable :

>>> my_list = [1, 2, 3, 4, 5]
>>> sub_list = ['x', 'y']

Si un élément (au moins) est contenu dans le sur-ensemble ( or ) :

>>> next((True for item in sub_list if next((True for x in my_list if x == item), False)), False)
False

>>> sub_list[0] = 3
>>> next((True for item in sub_list if next((True for x in my_list if x == item), False)), False)
True

Si tous les éléments sont contenus dans le super-ensemble ( and ), alors sub_list est un sous-ensemble complet. On y trouve également un peu de La loi de Morgan :

>>> next((False for item in sub_list if item not in my_list), True)
False

>>> sub_list[1] = 2
>>> next((False for item in sub_list if item not in my_list), True)
True
>>> next((True for item in sub_list if next((True for x in my_list if x == item), False)), False)
True

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X