2009-08-17 11 views
26

Quando si utilizza una comprensione di lista, l'ordine della nuova lista è garantito in alcun modo? Come un esempio forzato, è il seguente comportamento garantita dalla definizione di una lista di comprensione:È garantito l'ordine dei risultati provenienti da una comprensione della lista?

>> a = [x for x in [1,2,3]] 
>> a 
[1, 2, 3] 

Allo stesso modo, è la seguente uguaglianza garantito:

>> lroot = [1, 2, 3] 
>> la = [x for x in lroot] 
>> lb = [] 
>> for x in lroot: 
    lb.append(x) 
>> lb == la 
True 

In particolare, è l'ordinamento che mi interessa Qui.

+2

Sì, è garantito. È una sequenza. – hughdbrown

risposta

28

Sì, la comprensione dell'elenco mantiene l'ordine dell'originale iterabile (se ce n'è uno). Se l'originale iterabile è ordinato (elenco, tupla, file, ecc.), Questo è l'ordine che otterrete nel risultato. Se il tuo iterabile non è ordinato (set, dict, ecc.), Non ci sono garanzie sull'ordine degli articoli.

+1

Con set e dicts, credo ci sia una garanzia che l'ordine non cambierà se i dati non cambiano. per esempio. dato un insieme 's', il seguente sarà sempre vero:' [x per x in s] == [x per x in s] '. –

+0

Ciò significa anche che l'esecuzione della comprensione è in questo ordine? Cioè [x per x in s se p (x)] chiama p (x) nell'ordine di s o potrebbe (anche se solo in teoria) essere in un ordine diverso e il risultato in qualche modo "ordinato" torna all'ordine corretto in seguito ? –

3

Sì, una lista è una sequenza. L'ordine di sequenza è significativo.

Problemi correlati