Maison >développement back-end >Tutoriel Python >Pourquoi la conversion d'une liste en ensemble modifie-t-elle l'ordre et comment puis-je le conserver ?

Pourquoi la conversion d'une liste en ensemble modifie-t-elle l'ordre et comment puis-je le conserver ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-30 22:18:13323parcourir

Why Does Converting a List to a Set Change the Order, and How Can I Preserve It?

Modifications de l'ordre dans les conversions d'ensembles

Lors de la conversion d'une liste en un ensemble en Python, l'ordre des éléments semble être modifié. Cela peut être déroutant, car les listes conservent l’ordre de leurs éléments, tandis que les ensembles sont des structures de données non ordonnées. La raison de cet écart réside dans la nature fondamentale des ensembles.

Les ensembles sont conçus pour effectuer des tests d'appartenance efficaces et ne conservent pas l'ordre d'insertion des éléments. En effet, les ensembles sont représentés en interne sous forme de tables de hachage, où les éléments sont stockés de manière brouillée pour une recherche plus rapide.

Comment conserver la commande

Si vous avez besoin de la préservation d'ordre dans vos collectes de données, il existe plusieurs alternatives à l'utilisation d'ensembles :

  • Liste Compréhension : Pour effectuer des opérations d'ensemble tout en conservant l'ordre d'origine, utilisez une compréhension de liste. Par exemple, pour supprimer des éléments d'une liste A basée sur un ensemble B, utilisez le code suivant :
B = set([6, 20, 1])
result = [x for x in A if x not in B]
  • Dictionnaire ordonné (Python 3.7) : Python les dictionnaires fournissent désormais la fonctionnalité OrderedDict, garantissant la préservation de l'ordre d'insertion. Pour effectuer des opérations d'ensemble :
import collections
A = collections.OrderedDict.fromkeys([1, 2, 20, 6, 210])
B = collections.OrderedDict.fromkeys([6, 20, 1])
result = collections.OrderedDict.fromkeys(x for x in A if x not in B)
  • Anciennes versions de Python : Pour les versions de Python antérieures à 3.7, utilisez plutôt le module collections.OrderedDict.

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