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 ?
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 ?
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))
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.
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 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.