Maison >développement back-end >Tutoriel Python >Comment puis-je trier efficacement deux listes parallèles en Python tout en maintenant la synchronisation ?

Comment puis-je trier efficacement deux listes parallèles en Python tout en maintenant la synchronisation ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-11 14:49:12461parcourir

How Can I Efficiently Sort Two Parallel Lists in Python While Maintaining Synchronization?

Tri des listes avec permutation de la liste parallèle

Étant donné deux listes parallèles, l'une peut être triée tout en réorganisant l'autre de manière synchronisée. Ceci est réalisé en triant la première liste et en utilisant les indices des éléments réorganisés pour réorganiser la deuxième liste.

Une approche courante est l'idiome « décorer, trier, annuler la décoration », qui compresse les deux listes, les trie en fonction de la première liste, puis décompresse le résultat. En utilisant la fonction zip de Python, cela peut être implémenté de manière concise comme suit :

list1, list2 = zip(*sorted(zip(list1, list2)))

Cependant, pour les listes plus grandes, une version sur place plus efficace existe :

tups = zip(list1, list2)
tups.sort()
list1, list2 = zip(*tups)

Pour les listes contenant non -des éléments comparables, des indices de tri utilisant des fonctions lambda peuvent être utilisés. Alternativement, une fonction clé peut être fournie au tri pour éviter de comparer les éléments de la deuxième liste :

result1, result2 = zip(*sorted(zip(list1, list2), key=lambda x: x[0]))

Les entrées vides doivent être traitées séparément, et il faut être conscient que la version en place peut être légèrement plus rapide , surtout pour les petites listes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn