Un list maintient l'ordre, dict et set n'est pas le cas: quand vous vous souciez de l'ordre, par conséquent, vous devez utiliser list (si votre choix de récipients est limitée à ces trois, bien sûr;-).
dict associés avec chaque clé de la valeur, tandis que list et set juste contiennent des valeurs: c'est très différent des cas d'utilisation, évidemment.
set nécessite les éléments à hashable, list n'est pas le cas: si vous avez de la non-hashable éléments, par conséquent, vous ne pouvez pas utiliser set et devez plutôt utiliser list.
set interdit les doublons, list ne le fait pas: aussi une distinction essentielle. (Un "multiset", qui associe les doublons dans un nombre différent pour les éléments présents plus d'une fois, peut être trouvé dans collections.Counter -- vous pourriez construire un comme un dict, si pour une raison ou une autre, vous ne pouvez pas importer collections, ou, en pré-2.7 de Python comme un collections.defaultdict(int), en utilisant les éléments clés et la valeur associée comme le comte).
La vérification de l'appartenance d'une valeur dans une set (ou dict, pour les touches) est extrêmement rapide (environ une constante, peu de temps), alors que dans une liste, il faut du temps proportionnel à la liste de longueur dans la moyenne et au pire des cas. Donc, si vous avez hashable éléments, ne se soucient pas de toute façon au sujet de l'ordre ou les doublons, et veulent rapidement l'adhésion de la vérification, set est mieux que list.
Je souhaite que je pourrais donner ma réponse voix à la vôtre... salut tout le monde, c'est là que la viande est 🙂
J'ai pris l'appât! merci pour le résumé!
merci! Hmmm, peut-être l'idée de "transfert de upvotes" (à un certain "taux d'actualisation", par exemple, 2 pour 1) est la peine de discuter dans les méta -...? -) Je sais que j'ai ressenti de la même façon à certaines occasions...
Je pourrais utiliser une liste pour créer une liste de pièces uniques, comme un ensemble; c'est la principale raison de l'utilisation d'un jeu de vitesse?
Je comprends pourquoi des ensembles et des dictionnaires prendre une constante de temps de les regarder, et que c'est supérieur à la recherche à travers une longue liste, mais est-ce vraiment plus rapide de hachage de la clé de vérifier quelques éléments? Est-il plus rapide de regarder à travers un ensemble que de regarder à travers une liste de 2 à 4 éléments?
Notez que Python 3.7 a dict commandé par défaut
upvoted ici est une drôle de question, si je veux à la fois l'ordre et veulent aussi être en mesure de mettre à jour basée sur les touches, je parle de stockage de données de séries chronologiques à l'intérieur de la structure où le même horodatage peut obtenir plusieurs mises à jour pour une minute, puis nous passons à la prochaine timestamp
Avez-vous besoin d'une séquence ordonnée d'éléments? Aller pour une liste.
Avez-vous juste besoin de savoir si oui ou non vous avez déjà ai une valeur particulière, mais sans la commande (et vous n'avez pas besoin de stocker les doublons)? L'utilisation d'un ensemble.
Avez-vous besoin d'associer les valeurs avec les touches, de sorte que vous pouvez les regarder de manière efficace (par clé) plus tard? Utiliser un dictionnaire.
Ce devrait être le "TL;DR" une partie de la réponse ci-dessus par M. Alex 🙂
Je pense que c'est l'inverse.. Alex devrait donner sa voix à Jon. Cette réponse couvre à peu près tout et c'est beaucoup plus concis et clair.
Quand vous voulez une collection non ordonnée d'éléments uniques, utiliser un set. (Par exemple, lorsque vous souhaitez que l'ensemble de tous les mots utilisés dans un document).
Lorsque vous souhaitez collecter immuable liste ordonnée d'éléments, l'utilisation d'un tuple. (Par exemple, lorsque vous voulez un (nom, phone_number) paire que vous souhaitez utiliser comme un élément dans un ensemble, vous auriez besoin d'un tuple, plutôt qu'une liste depuis le requièrent des éléments immuables).
Lorsque vous souhaitez collecter une mutable liste ordonnée d'éléments, l'utilisation d'un list. (Par exemple, lorsque vous souhaitez ajouter de nouveaux numéros de téléphone à une liste: [nombre1, nombre2, ...]).
Lorsque vous voulez un mappage de touches de valeurs, utilisez un dict. (Par exemple, lorsque vous voulez un annuaire téléphonique qui associe des noms aux numéros de téléphone: {'John Smith' : '555-1212'}). Remarque les clés dans un dict sont non-ordonnée. (Si vous parcourir une dict (annuaire téléphonique), les clés (noms) peuvent apparaître dans n'importe quel ordre).
Bien que cela ne couvre pas sets, c'est une bonne explication de dicts et lists:
Listes sont ce qu'elles semblent être - une liste de valeurs. Chacun d'eux est
numérotés à partir de zéro - le premier est numéroté zéro, la
seconde 1, le troisième 2, etc. Vous pouvez supprimer des valeurs de la liste, et
ajouter de nouvelles valeurs à la fin. Exemple: Votre beaucoup les noms des chats.
Dictionnaires sont similaires à ce que leur nom l'indique - un dictionnaire.
Dans un dictionnaire, vous disposez d'un index de mots, et pour chacun d'eux une
définition. En python, le mot est appelé un "key", et la définition
une 'valeur'. Les valeurs dans un dictionnaire ne sont pas numérotés - tare similaires
à ce que leur nom l'indique - un dictionnaire. Dans un dictionnaire, vous avez
un index des mots, et pour chacun d'eux une définition. Les valeurs dans
un dictionnaire ne sont pas numérotés - ils ne sont pas dans un ordre particulier,
la clé fait la même chose. Vous pouvez ajouter, supprimer et modifier des
les valeurs dans les dictionnaires. Exemple: annuaire téléphonique.
En combinaison avec listes, dicts et jeux de, il y a aussi un autre site intéressant des objets python, OrderedDicts.
Commandé dictionnaires sont comme des dictionnaires, mais ils se souviennent de l'ordre que les articles ont été insérés. Lors de l'itération sur un ordre du dictionnaire, les articles sont retournés dans l'ordre de leurs clés ont d'abord été ajoutée.
OrderedDicts pourrait être utile lorsque vous avez besoin de préserver l'ordre des clés, par exemple le travail avec les documents: Il est commun que le besoin d'une représentation vectorielle de tous les termes dans un document. Donc, en utilisant OrderedDicts vous permettent de vérifier si un terme a été lu avant, ajouter des termes, extraire des termes, et après toutes les manipulations que vous pouvez extraire de la commande vectorielle de la représentation d'entre eux.
Listes sont ce qu'elles semblent être - une liste de valeurs. Chacun d'eux est, numérotés à partir de zéro - le premier est numéroté zéro, la seconde 1, le troisième 2, etc. Vous pouvez supprimer des valeurs de la liste, et d'ajouter de nouvelles valeurs à la fin. Exemple: Votre beaucoup les noms des chats.
Tuples sont juste comme des listes, mais vous ne pouvez pas modifier leurs valeurs. Les valeurs que vous lui donnez d'abord, ce sont les valeurs que vous êtes coincé avec le reste du programme. Encore une fois, chaque valeur est numérotés à partir de zéro, pour faciliter les références. Exemple: les noms des mois de l'année.
Dictionnaires sont similaires à ce que leur nom l'indique - un dictionnaire. Dans un dictionnaire, vous disposez d'un index de mots, et pour chacun d'eux une définition. En python, le mot est appelé un "key", et la définition d'une "valeur". Les valeurs dans un dictionnaire ne sont pas numérotés - tare similaire à ce que leur nom l'indique - un dictionnaire. Dans un dictionnaire, vous disposez d'un index de mots, et pour chacun d'eux une définition. En python, le mot est appelé un "key", et la définition d'une "valeur". Les valeurs dans un dictionnaire ne sont pas numérotés - ils ne sont pas dans un ordre particulier, la clé fait la même chose. Vous pouvez ajouter, supprimer et modifier les valeurs dans les dictionnaires. Exemple: annuaire téléphonique.
Ce que vous devez garder à l'esprit de Python est: Il n'existe pas de standard Python comme pour C++. Donc il peut y avoir des différences énormes pour les différents interpréteurs Python (par exemple, Disponible, PyPy). L'organigramme ci-dessous est Disponible pour.
De plus je n'ai pas trouvé la bonne façon d'intégrer les structures de données suivantes dans le schéma: bytes, byte arrays, tuples, named_tuples, ChainMap, Counter, et arrays.
OrderedDict et deque sont disponibles via collections module.
heapq est disponible à partir de la heapq module
LifoQueue, Queue, et PriorityQueue sont disponibles via le queue module qui est conçu pour simultanées (threads) d'accès. (Il y a aussi un multiprocessing.Queue disponible, mais je ne sais pas les différences de queue.Queue mais suppose qu'il doit être utilisé lors de l'accès simultané à partir de processus sont nécessaires).
dict, set, frozen_set, et list sont builtin bien sûr
Pour quelqu'un, je vous serais reconnaissant si vous pourriez améliorer cette réponse et de fournir un meilleur schéma dans tous les aspects. Se sentir libre et de bienvenue.
PS: le schéma a été fait avec les affichent pas. Le fichier graphml est ici
Un
list
maintient l'ordre,dict
etset
n'est pas le cas: quand vous vous souciez de l'ordre, par conséquent, vous devez utiliserlist
(si votre choix de récipients est limitée à ces trois, bien sûr;-).dict
associés avec chaque clé de la valeur, tandis quelist
etset
juste contiennent des valeurs: c'est très différent des cas d'utilisation, évidemment.set
nécessite les éléments à hashable,list
n'est pas le cas: si vous avez de la non-hashable éléments, par conséquent, vous ne pouvez pas utiliserset
et devez plutôt utiliserlist
.set
interdit les doublons,list
ne le fait pas: aussi une distinction essentielle. (Un "multiset", qui associe les doublons dans un nombre différent pour les éléments présents plus d'une fois, peut être trouvé danscollections.Counter
-- vous pourriez construire un comme undict
, si pour une raison ou une autre, vous ne pouvez pas importercollections
, ou, en pré-2.7 de Python comme uncollections.defaultdict(int)
, en utilisant les éléments clés et la valeur associée comme le comte).La vérification de l'appartenance d'une valeur dans une
set
(oudict
, pour les touches) est extrêmement rapide (environ une constante, peu de temps), alors que dans une liste, il faut du temps proportionnel à la liste de longueur dans la moyenne et au pire des cas. Donc, si vous avez hashable éléments, ne se soucient pas de toute façon au sujet de l'ordre ou les doublons, et veulent rapidement l'adhésion de la vérification,set
est mieux quelist
.Utiliser un dictionnaire quand vous avez un ensemble de clés uniques que la carte de valeurs.
Utiliser une liste, si vous avez une collection ordonnée d'éléments.
L'utilisation d'un ensemble de magasin d'une non-ordonnée ensemble des éléments.
Quand vous voulez une collection non ordonnée d'éléments uniques, utiliser un
set
. (Par exemple, lorsque vous souhaitez que l'ensemble de tous les mots utilisés dans un document).Lorsque vous souhaitez collecter immuable liste ordonnée d'éléments, l'utilisation d'un
tuple
. (Par exemple, lorsque vous voulez un (nom, phone_number) paire que vous souhaitez utiliser comme un élément dans un ensemble, vous auriez besoin d'un tuple, plutôt qu'une liste depuis le requièrent des éléments immuables).Lorsque vous souhaitez collecter une mutable liste ordonnée d'éléments, l'utilisation d'un
list
. (Par exemple, lorsque vous souhaitez ajouter de nouveaux numéros de téléphone à une liste: [nombre1, nombre2, ...]).Lorsque vous voulez un mappage de touches de valeurs, utilisez un
dict
. (Par exemple, lorsque vous voulez un annuaire téléphonique qui associe des noms aux numéros de téléphone:{'John Smith' : '555-1212'}
). Remarque les clés dans un dict sont non-ordonnée. (Si vous parcourir une dict (annuaire téléphonique), les clés (noms) peuvent apparaître dans n'importe quel ordre).Bien que cela ne couvre pas
set
s, c'est une bonne explication dedict
s etlist
s:http://www.sthurlow.com/python/lesson06/
Quand les utiliser, je fais une liste exhaustive de triche de leurs méthodes pour votre référence:
En combinaison avec listes, dicts et jeux de, il y a aussi un autre site intéressant des objets python, OrderedDicts.
OrderedDicts pourrait être utile lorsque vous avez besoin de préserver l'ordre des clés, par exemple le travail avec les documents: Il est commun que le besoin d'une représentation vectorielle de tous les termes dans un document. Donc, en utilisant OrderedDicts vous permettent de vérifier si un terme a été lu avant, ajouter des termes, extraire des termes, et après toutes les manipulations que vous pouvez extraire de la commande vectorielle de la représentation d'entre eux.
Listes sont ce qu'elles semblent être - une liste de valeurs. Chacun d'eux est, numérotés à partir de zéro - le premier est numéroté zéro, la seconde 1, le troisième 2, etc. Vous pouvez supprimer des valeurs de la liste, et d'ajouter de nouvelles valeurs à la fin. Exemple: Votre beaucoup les noms des chats.
Tuples sont juste comme des listes, mais vous ne pouvez pas modifier leurs valeurs. Les valeurs que vous lui donnez d'abord, ce sont les valeurs que vous êtes coincé avec le reste du programme. Encore une fois, chaque valeur est numérotés à partir de zéro, pour faciliter les références. Exemple: les noms des mois de l'année.
Dictionnaires sont similaires à ce que leur nom l'indique - un dictionnaire. Dans un dictionnaire, vous disposez d'un index de mots, et pour chacun d'eux une définition. En python, le mot est appelé un "key", et la définition d'une "valeur". Les valeurs dans un dictionnaire ne sont pas numérotés - tare similaire à ce que leur nom l'indique - un dictionnaire. Dans un dictionnaire, vous disposez d'un index de mots, et pour chacun d'eux une définition. En python, le mot est appelé un "key", et la définition d'une "valeur". Les valeurs dans un dictionnaire ne sont pas numérotés - ils ne sont pas dans un ordre particulier, la clé fait la même chose. Vous pouvez ajouter, supprimer et modifier les valeurs dans les dictionnaires. Exemple: annuaire téléphonique.
Pour le C++, j'ai été toujours avoir ce diagramme à l'esprit: Dans le scénario dois-je utiliser un particulier conteneur STL?, donc j'étais curieux de savoir si quelque chose de similaire est disponible pour Python3, mais je n'avais pas de chance.
Ce que vous devez garder à l'esprit de Python est: Il n'existe pas de standard Python comme pour C++. Donc il peut y avoir des différences énormes pour les différents interpréteurs Python (par exemple, Disponible, PyPy). L'organigramme ci-dessous est Disponible pour.
De plus je n'ai pas trouvé la bonne façon d'intégrer les structures de données suivantes dans le schéma:
bytes
,byte arrays
,tuples
,named_tuples
,ChainMap
,Counter
, etarrays
.OrderedDict
etdeque
sont disponibles viacollections
module.heapq
est disponible à partir de laheapq
moduleLifoQueue
,Queue
, etPriorityQueue
sont disponibles via lequeue
module qui est conçu pour simultanées (threads) d'accès. (Il y a aussi unmultiprocessing.Queue
disponible, mais je ne sais pas les différences dequeue.Queue
mais suppose qu'il doit être utilisé lors de l'accès simultané à partir de processus sont nécessaires).dict
,set
,frozen_set
, etlist
sont builtin bien sûrPour quelqu'un, je vous serais reconnaissant si vous pourriez améliorer cette réponse et de fournir un meilleur schéma dans tous les aspects. Se sentir libre et de bienvenue.
PS: le schéma a été fait avec les affichent pas. Le fichier graphml est ici