2010-08-15 15 views

risposta

489

Un list mantiene l'ordine, dict e set no: quando vi preoccupate per ordine, quindi, è necessario utilizzare list (se la vostra scelta di contenitori è limitata a questi tre, ovviamente ;-).

dict associa a ogni chiave un valore, mentre list e set contengono solo valori: casi d'uso molto diversi, ovviamente.

set richiede elementi per essere hashable, list non lo fa: se si dispone di elementi non hashable, di conseguenza, non è possibile utilizzare set e invece necessario utilizzare list.

set proibisce i duplicati, list no: anche una distinzione fondamentale. (Un "multiset", che mappa i duplicati in un conteggio diverso per gli articoli presenti più di una volta, può essere trovato in collections.Counter - potresti costruirne uno come dict, se per qualche strano motivo non potresti importare collections, o, in pre-2.7 Python come collections.defaultdict(int), utilizzando gli elementi come chiavi e il valore associato come conteggio).

Il controllo per l'appartenenza di un valore in un set (o dict, per le chiavi) è incredibilmente veloce (richiede un tempo costante, breve), mentre in un elenco ci vuole tempo proporzionale alla lunghezza della lista nella media e peggiore casi. Quindi, se hai articoli lavabili, non ti preoccupare in alcun modo di ordini o duplicati, e vuoi un rapido controllo dell'appartenenza, set è meglio di list.

+47

Vorrei poter donare la mia risposta voti ai tuoi ... Ciao a tutti, questo è dove la carne è :) –

+0

Ho preso l'esca! grazie per il riassunto! – Blankman

+8

@Jon, grazie! Hmmm, forse l'idea di "trasferire gli upvotes" (ad alcuni "tassi di sconto", ad esempio 2 per 1) vale la pena di discuterne in meta ...?) So che mi sono sentito allo stesso modo in certe occasioni ... –

126
  • Ti serve solo una sequenza ordinata di articoli? Vai per una lista.
  • Hai solo bisogno di sapere se hai già ottenuto un valore particolare, ma senza ordinare (e non hai bisogno di memorizzare i duplicati)? Usa un set.
  • È necessario associare i valori con le chiavi, in modo da poterli esaminare in modo efficiente (per chiave) in seguito? Usa un dizionario.
+24

questo dovrebbe essere il "TL; DR" parte alla risposta di cui sopra da Alex M. :-) –

+5

penso è il contrario ...Alex dovrebbe donare i suoi voti a Jon. Questa risposta copre praticamente tutto ed è molto più concisa e chiara. – mehmet

13

Se si desidera una raccolta non ordinata di elementi unici, utilizzare set. (Ad esempio, quando si desidera l'insieme di tutte le parole utilizzate in un documento).

Quando si desidera raccogliere un elenco di elementi immutabile ordinato, utilizzare tuple. (Ad esempio, quando si desidera una coppia (nome, numero telefonico) che si desidera utilizzare come elemento in un set, è necessaria una tupla anziché una lista poiché i set richiedono che gli elementi siano immutabili).

Quando si desidera raccogliere un elenco di elementi ordinato modificabili, utilizzare list. (Ad esempio, quando si desidera aggiungere nuovi numeri di telefono a un elenco: [numero1, numero2, ...]).

Quando si desidera mappare da chiavi a valori, utilizzare dict. (Ad esempio, quando si desidera una rubrica che associa i nomi ai numeri di telefono: {'John Smith' : '555-1212'}). Nota i tasti in un dict non sono ordinati. (Se si scorre su un dettato (rubrica), i tasti (nomi) possono essere visualizzati in qualsiasi ordine).

+0

Uh, non ha chiesto delle tuple. – habnabit

14
  • Utilizzare un dizionario quando si dispone di un insieme di chiavi univoche che si associano ai valori.

  • Utilizzare un elenco se si dispone di una raccolta ordinata di articoli.

  • Utilizzare un set per memorizzare un set non ordinato di elementi.

4

Anche se questo non copre set s, è una buona spiegazione di dict s e list s:

liste sono quello che sembrano - un elenco di valori. Ognuno di essi è numerato , a partire da zero: il primo è numerato zero, il secondo 1, il terzo 2, ecc. È possibile rimuovere i valori dall'elenco e aggiungere nuovi valori alla fine. Esempio: i nomi dei tuoi molti gatti.

I dizionari sono simili a ciò che suggerisce il loro nome: un dizionario. In un dizionario, hai un 'indice' di parole, e per ognuna di esse una definizione . In Python, la parola è chiamata "chiave" e la definizione un "valore". I valori in un dizionario non sono numerati - tara simile a quello che suggerisce il loro nome - un dizionario. In un dizionario, hai un 'indice' di parole e per ognuna di esse una definizione. I valori nel dizionario non sono numerati - non sono in alcun ordine specifico, - la chiave fa la stessa cosa. È possibile aggiungere, rimuovere e modificare i valori nei dizionari. Esempio: rubrica.

http://www.sthurlow.com/python/lesson06/

+1

Questa è una domanda eccezionale, la maggior parte dei rispondenti ha una reputazione di ~ 500k .. – mehmet

0

liste sono quello che sembrano - un elenco di valori. Ognuno di essi è numerato, a partire da zero: il primo è numerato zero, il secondo 1, il terzo 2, ecc. È possibile rimuovere i valori dall'elenco e aggiungere nuovi valori alla fine. Esempio: i nomi dei tuoi molti gatti.

Tuples sono proprio come gli elenchi, ma non è possibile modificare i loro valori. I valori che gli vengono dati per primi, sono i valori con cui sei bloccato per il resto del programma. Di nuovo, ogni valore è numerato a partire da zero, per un facile riferimento. Esempio: i nomi dei mesi dell'anno.

I dizionari sono simili a ciò che suggerisce il loro nome: un dizionario. In un dizionario, hai un 'indice' di parole e per ognuna di esse una definizione. In Python, la parola è chiamata "chiave" e la definizione è "valore". I valori in un dizionario non sono numerati - tara simile a ciò che suggerisce il loro nome - un dizionario. In un dizionario, hai un 'indice' di parole e per ognuna di esse una definizione. In Python, la parola è chiamata "chiave" e la definizione è "valore". I valori in un dizionario non sono numerati - non sono in alcun ordine specifico, neanche - la chiave fa la stessa cosa. È possibile aggiungere, rimuovere e modificare i valori nei dizionari. Esempio: rubrica.

0

Quando usarli, mi fa un bigino esaustivo dei loro metodi per il vostro riferimento:

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'}} 
Problemi correlati