Quand dois-je utiliser un dictionnaire, une liste ou un ensemble?
Existe-t-il des scénarios mieux adaptés à chaque type de données?
la source
Quand dois-je utiliser un dictionnaire, une liste ou un ensemble?
Existe-t-il des scénarios mieux adaptés à chaque type de données?
A list
garde l'ordre dict
et set
ne le fait pas: lorsque vous vous souciez de la commande, vous devez donc utiliser list
(si votre choix de conteneurs est limité à ces trois, bien sûr ;-).
dict
associe à chaque clé une valeur, tandis que list
et set
contiennent juste des valeurs: cas d'utilisation très différents, évidemment.
set
exige que les articles soient lavables, list
non: si vous avez des articles non lavables, vous ne pouvez donc pas les utiliser set
et devez plutôt les utiliser list
.
set
interdit les doublons, list
ne fait pas: aussi une distinction cruciale. (Un "multiset", qui mappe les doublons dans un nombre différent pour les éléments présents plus d'une fois, peut être trouvé dans collections.Counter
- vous pouvez en créer un comme dict
, si pour une raison étrange vous ne pouviez pas importer collections
, ou, dans la version antérieure à 2.7 Python en tant que a collections.defaultdict(int)
, en utilisant les éléments comme clés et la valeur associée comme nombre).
La vérification de l'appartenance d'une valeur à un set
(ou dict
, pour les clés) est incroyablement rapide (prenant environ un temps constant et court), tandis que dans une liste, cela prend du temps proportionnel à la longueur de la liste dans la moyenne et le pire des cas. Donc, si vous avez des articles lavables, ne vous souciez pas de la commande ou des doublons, et souhaitez une vérification rapide de l'adhésion, set
c'est mieux que list
.
la source
Lorsque vous souhaitez une collection non ordonnée d'éléments uniques, utilisez a
set
. (Par exemple, lorsque vous voulez l'ensemble de tous les mots utilisés dans un document).Lorsque vous souhaitez collecter une liste d'éléments ordonnée immuable, utilisez a
tuple
. (Par exemple, lorsque vous voulez une paire (nom, numéro de téléphone) que vous souhaitez utiliser comme élément dans un ensemble, vous aurez besoin d'un tuple plutôt que d'une liste car les ensembles nécessitent que les éléments soient immuables).Lorsque vous souhaitez collecter une liste d'éléments ordonnés modifiables, utilisez a
list
. (Par exemple, lorsque vous souhaitez ajouter de nouveaux numéros de téléphone à une liste: [numéro1, numéro2, ...]).Lorsque vous souhaitez un mappage des clés aux valeurs, utilisez a
dict
. (Par exemple, lorsque vous voulez un annuaire téléphonique qui mappe les noms aux numéros de téléphone:){'John Smith' : '555-1212'}
. Notez que les clés d'un dict ne sont pas ordonnées. (Si vous parcourez un dict (annuaire téléphonique), les touches (noms) peuvent apparaître dans n'importe quel ordre).la source
Utilisez un dictionnaire lorsque vous disposez d'un ensemble de clés uniques qui correspondent aux valeurs.
Utilisez une liste si vous avez une collection d'articles commandée.
Utilisez un ensemble pour stocker un ensemble d'éléments non ordonnés.
la source
En bref, utilisez:
list
- si vous avez besoin d'une séquence d'articles commandée.dict
- si vous souhaitez associer des valeurs à des clésset
- si vous souhaitez conserver des éléments uniques.Explication détaillée
liste
Une liste est une séquence modifiable, généralement utilisée pour stocker des collections d'éléments homogènes.
Une liste implémente toutes les opérations de séquence courantes:
x in l
etx not in l
l[i]
,l[i:j]
,l[i:j:k]
len(l)
,min(l)
,max(l)
l.count(x)
l.index(x[, i[, j]])
- indice de la 1ère occurrence dex
inl
(à ou aprèsi
et avant lesj
indécès)Une liste implémente également toutes les opérations de séquence mutable:
l[i] = x
- articlei
del
est remplacé parx
l[i:j] = t
- tranche del
dei
àj
est remplacée par le contenu de l'itérablet
del l[i:j]
- pareil quel[i:j] = []
l[i:j:k] = t
- les éléments del[i:j:k]
sont remplacés par ceux det
del l[i:j:k]
- supprime les éléments des[i:j:k]
de la listel.append(x)
- ajoutex
à la fin de la séquencel.clear()
- supprime tous les éléments del
(comme dell[:]
)l.copy()
- crée une copie superficielle del
(identique àl[:]
)l.extend(t)
oul += t
- s'étendl
avec le contenu det
l *= n
- metl
à jour son contenu plusieursn
foisl.insert(i, x)
- s'insèrex
dansl
l'index donné pari
l.pop([i])
- récupère l'élément ài
et le supprime également del
l.remove(x)
- supprimer le premier élément d'l
oùl[i]
est égal à xl.reverse()
- inverse les élémentsl
en placeUne liste pourrait être utilisée comme pile en tirant parti des méthodes
append
etpop
.dictionnaire
Un dictionnaire mappe des valeurs lavables à des objets arbitraires. Un dictionnaire est un objet modifiable. Les opérations principales sur un dictionnaire sont le stockage d'une valeur avec une clé et l'extraction de la valeur donnée la clé.
Dans un dictionnaire, vous ne pouvez pas utiliser comme clés des valeurs non hachables, c'est-à-dire des valeurs contenant des listes, des dictionnaires ou d'autres types mutables.
Ensemble
Un ensemble est une collection non ordonnée d'objets lavables distincts. Un ensemble est couramment utilisé pour inclure les tests d'appartenance, la suppression des doublons d'une séquence et le calcul des opérations mathématiques telles que l'intersection, l'union, la différence et la différence symétrique.
la source
Bien que cela ne couvre pas les
set
s, c'est une bonne explication desdict
s etlist
s:http://www.sthurlow.com/python/lesson06/
la source
Pour C ++, j'avais toujours cet organigramme à l'esprit: dans quel scénario dois-je utiliser un conteneur STL particulier? , donc j'étais curieux de savoir si quelque chose de similaire est également disponible pour Python3, mais je n'ai pas eu de chance.
Ce que vous devez garder à l'esprit pour Python est: Il n'y a pas de standard Python unique comme pour C ++. Par conséquent, il pourrait y avoir d'énormes différences pour différents interprètes Python (par exemple CPython, PyPy). L'organigramme suivant concerne CPython.
De plus je ne ai trouvé bon moyen d'intégrer les structures de données suivantes dans le diagramme:
bytes
,byte arrays
,tuples
,named_tuples
,ChainMap
,Counter
etarrays
.OrderedDict
etdeque
sont disponibles via lecollections
module.heapq
est disponible depuis leheapq
moduleLifoQueue
,,Queue
etPriorityQueue
sont disponibles via lequeue
module conçu pour un accès simultané (threads). (Il existe également une versionmultiprocessing.Queue
disponible, mais je ne connais pas les différences,queue.Queue
mais supposerait qu'elle devrait être utilisée lorsqu'un accès simultané à partir de processus est nécessaire.)dict
,set
,frozen_set
Etlist
sont bien sûr builtinPour tous, je vous serais reconnaissant de bien vouloir améliorer cette réponse et de fournir un meilleur diagramme dans tous les aspects. N'hésitez pas et bienvenue.
PS: le schéma a été réalisé avec yed. Le fichier graphml est ici
la source
En combinaison avec des listes , des dict et des ensembles , il existe également un autre objet python intéressant, OrderedDicts .
OrderedDicts peut être utile lorsque vous devez conserver l'ordre des clés, par exemple en travaillant avec des documents: il est courant d'avoir besoin de la représentation vectorielle de tous les termes d'un document. Ainsi, en utilisant OrderedDicts, vous pouvez vérifier efficacement si un terme a été lu auparavant, ajouter des termes, extraire des termes et après toutes les manipulations, vous pouvez en extraire la représentation vectorielle ordonnée.
la source
Les listes sont ce qu'elles semblent - une liste de valeurs. Chacun d'eux est numéroté à partir de zéro - le premier est numéroté zéro, le deuxième 1, le troisième 2, etc. Vous pouvez supprimer des valeurs de la liste et ajouter de nouvelles valeurs à la fin. Exemple: le nom de vos nombreux chats.
Les tuples sont comme des listes, mais vous ne pouvez pas modifier leurs valeurs. Les valeurs que vous lui attribuez en premier sont les valeurs avec lesquelles vous êtes coincé pour le reste du programme. Encore une fois, chaque valeur est numérotée à partir de zéro, pour une référence facile. Exemple: les noms des mois de l'année.
Les dictionnaires sont similaires à ce que leur nom suggère - un dictionnaire. Dans un dictionnaire, vous avez un «index» de mots, et pour chacun d'eux une définition. En python, le mot est appelé une «clé» et la définition une «valeur». Les valeurs d'un dictionnaire ne sont pas numérotées - elles sont similaires à ce que leur nom suggère - un dictionnaire. Dans un dictionnaire, vous avez un «index» de mots, et pour chacun d'eux une définition. En python, le mot est appelé une «clé» et la définition une «valeur». Les valeurs d'un dictionnaire ne sont pas numérotées - elles ne sont pas non plus dans un ordre spécifique - la clé fait la même chose. Vous pouvez ajouter, supprimer et modifier les valeurs dans les dictionnaires. Exemple: annuaire téléphonique.
la source
Lorsque vous les utilisez, je fais une feuille de triche exhaustive de leurs méthodes pour votre référence:
la source
Dictionnaire: un dictionnaire python est utilisé comme une table de hachage avec clé comme index et objet comme valeur.
Liste: une liste est utilisée pour contenir des objets dans un tableau indexé par la position de cet objet dans le tableau.
Ensemble: Un ensemble est une collection avec des fonctions qui peuvent dire si un objet est présent ou non dans l'ensemble.
la source