Réponses:
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
.
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).
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és
set
- si vous souhaitez conserver des éléments uniques.
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
et x 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 de x
in l
(à ou après i
et avant les j
indécès)Une liste implémente également toutes les opérations de séquence mutable:
l[i] = x
- article i
de l
est remplacé parx
l[i:j] = t
- tranche de l
de i
à j
est remplacée par le contenu de l'itérablet
del l[i:j]
- pareil que l[i:j] = []
l[i:j:k] = t
- les éléments de l[i:j:k]
sont remplacés par ceux det
del l[i:j:k]
- supprime les éléments de s[i:j:k]
de la listel.append(x)
- ajoute x
à la fin de la séquencel.clear()
- supprime tous les éléments de l
(comme del l[:]
)l.copy()
- crée une copie superficielle de l
(identique à l[:]
)l.extend(t)
ou l += t
- s'étend l
avec le contenu det
l *= n
- met l
à jour son contenu plusieurs n
foisl.insert(i, x)
- s'insère x
dans l
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éments l
en placeUne liste pourrait être utilisée comme pile en tirant parti des méthodes append
et pop
.
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.
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.
Bien que cela ne couvre pas les set
s, c'est une bonne explication des dict
s et list
s:
Les listes sont ce qu'elles semblent être - 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 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. 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.
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
et arrays
.
OrderedDict
et deque
sont disponibles via le collections
module.heapq
est disponible depuis le heapq
moduleLifoQueue
,, Queue
et PriorityQueue
sont disponibles via le queue
module conçu pour un accès simultané (threads). (Il existe également une version multiprocessing.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
Et list
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
En combinaison avec des listes , des dict et des ensembles , il existe également un autre objet python intéressant, OrderedDicts .
Les dictionnaires commandés sont comme les dictionnaires ordinaires, mais ils se souviennent de l'ordre dans lequel les éléments ont été insérés. Lors de l'itération sur un dictionnaire ordonné, les éléments sont retournés dans l'ordre dans lequel leurs clés ont été ajoutées en premier.
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.
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.
Lorsque vous les utilisez, je fais une feuille de triche exhaustive de leurs méthodes pour votre référence:
class ContainerMethods:
def __init__(self):
self.list_methods_11 = {
'Add':{'append','extend','insert'},
'Subtract':{'pop','remove'},
'Sort':{'reverse', 'sort'},
'Search':{'count', 'index'},
'Entire':{'clear','copy'},
}
self.tuple_methods_2 = {'Search':'count','index'}
self.dict_methods_11 = {
'Views':{'keys', 'values', 'items'},
'Add':{'update'},
'Subtract':{'pop', 'popitem',},
'Extract':{'get','setdefault',},
'Entire':{ 'clear', 'copy','fromkeys'},
}
self.set_methods_17 ={
'Add':{['add', 'update'],['difference_update','symmetric_difference_update','intersection_update']},
'Subtract':{'pop', 'remove','discard'},
'Relation':{'isdisjoint', 'issubset', 'issuperset'},
'operation':{'union' 'intersection','difference', 'symmetric_difference'}
'Entire':{'clear', 'copy'}}
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.