Una dichiarazione for/ordinaria garantisce che l'elenco sia iterato nell'ordine?Il costrutto loop for/in conserva l'ordine?
my_list = [5,4,3,2]
for i in my_list
print(i)
Cioè, il ciclo sopra è garantito per stampare 5 4 3 2
ogni volta?
Una dichiarazione for/ordinaria garantisce che l'elenco sia iterato nell'ordine?Il costrutto loop for/in conserva l'ordine?
my_list = [5,4,3,2]
for i in my_list
print(i)
Cioè, il ciclo sopra è garantito per stampare 5 4 3 2
ogni volta?
A for
l'ordine di iterazione del ciclo è controllato da qualsiasi oggetto stia passando. L'iterazione su una raccolta ordinata come una list
è garantita per iterare su elementi nell'ordine della lista, ma l'iterazione su una collezione non ordinata come una set
non garantisce quasi nessun ordine.
Quando si itera su una sequenza (elenco, tupla, ecc.), L'ordine è garantito. Le strutture tratteggiate (dict, set, ecc.) Hanno il loro ordine - ma per una data struttura, l'ordine sarà sempre lo stesso. Se aggiungi o cancelli un elemento, l'ordine potrebbe essere diverso.
Si consideri il codice folloing: Faccio una serie di cinque elementi, e quindi stamparlo con quattro identici per loop. L'ordine è lo stesso Quindi aggiungo due elementi; questo sconvolge l'ordine.
my_set = set(["Apple", "Banana", "Casaba", "Dinner", "Eggplant"])
for food in my_set:
print food,
print "\n"
for food in my_set:
print food,
print "\n"
for food in my_set:
print food,
print "\n"
for food in my_set:
print food,
print "\n"
my_set.add("Fruitcacke")
my_set.add("Grape")
for food in my_set:
print food,
print "\n"
uscita:
Casaba Dinner Apple Eggplant Banana
Casaba Dinner Apple Eggplant Banana
Casaba Dinner Apple Eggplant Banana
Casaba Dinner Apple Eggplant Banana
Casaba Fruitcacke Grape Apple Dinner Eggplant Banana
Si noti come gli elementi originali non sono più nello stesso ordine sono: "La cena" ora viene dopo "Apple".
"ogni volta" merita un po 'di elaborazione. All'interno di una singola esecuzione di un programma Python, l'iterazione su un dict o l'impostazione due volte senza la modifica produrrà lo stesso ordine, ma l'iterazione su "lo stesso" dettato o impostato in due diverse esecuzioni del programma potrebbe produrre due ordini diversi. – user2357112
Anche se attualmente l'ordine viene conservato ripetendo più volte su un set, questo non è garantito e non dovrebbe essere invocato. Se l'ordine è importante, è necessario scegliere una struttura dati che garantisca l'ordine. – syntonym
@ user2357112: Grazie; Ho aggiunto un esempio per illustrare. – Prune
Se si desidera verificare voi stessi:
my_list = [5,4,3,2]
for _ in range(20):
new_list = []
for i in my_list:
new_list.append(i)
print(my_list == new_list)
E solo per un caso di controllo:
print([2,4,5,3] == my_list)
Heh, ci ho provato anch'io. Quindi la mia domanda. Ma da allora ho scoperto il mio errore. ;-) –
Per le liste, sì, dal momento che sono ordinate strutture di dati in Python.
Sì, dovrebbe, ogni volta, poiché gli elenchi sono ordinati. –
Se si sta iterando su un 'dict', l'ordine potrebbe essere diverso da quello previsto. I dit Python non sono ordinati. – dawg
Vedere https://docs.python.org/2/reference/compound_stmts.html#the-for -mentation – jarmod