2 votes

Python 3 : Comment puis-je vérifier si deux listes correspondent même si les éléments ne sont pas dans l'ordre ?

J'ai deux listes :

original_list= [1,2,3,4,5]

new_list = [[1,7,3,4], [1,2,4,5,3]]

À part utiliser le tri et ensuite la liste dans la liste, comment puis-je comparer les valeurs de la liste originale sont dans la nouvelle liste ?

3voto

schwobaseggl Points 31215

Vous voulez trier chaque list en new_list pas new_list même. Essayez ceci par exemple en utilisant map :

print(sorted(original_list) in map(sorted, new_list))

ou si vous ne vous souciez que de l'existence des mêmes éléments, quel que soit leur nombre :

print(set(original_list) in map(set, new_list))

2voto

Jean-François Fabre Points 94672

En supposant que votre liste originale est déjà triée (si ce n'est pas le cas, appliquez simplement sort ), vous devez comparer chaque élément - trié - à l'aide d'une boucle ou de any :

new_list = [[1,7,3,4],[1,2,4,5,3]]
original_list= [1,2,3,4,5]
original_list.sort()  # optional if the list is not sorted yet

print(any(sorted(x)==original_list for x in new_list))

imprime True si une sous-liste de new_list a les mêmes éléments que original_list

Cela évite de reconstruire la liste originale en utilisant new_list = [sorted(x) for x in new_list] pour obtenir des éléments triés, car l'ordre peut être important après tout.

0voto

MSeifert Points 6307

Outre sorted qui a O(n*log(n)) comportement en cours d'exécution (dans le pire des cas je pense) vous pouvez utiliser collections.Counter (presque garanti O(n) comportement en cours d'exécution) :

>>> from collections import Counter
>>> lst_counts = Counter(original_list)
>>> any(lst_counts == Counter(sublist) for sublist in new_list)
True

Cela utilise le fait que Counter compare à la fois les clés et les valeurs et qu'ils ne sont donc égaux que si les dictionnaires (à l'intérieur de la balise Counter ) sont identiques

Si vous pouvez exclure les doublons, alors au lieu de Counter vous pouvez également utiliser set s.

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