Eventuali duplicati:
Traverse a list in reverse order in PythonCome invertire le tuple in Python?
è possibile? Non deve essere a posto, solo cercando un modo per invertire una tupla in modo da poterlo scorrere all'indietro.
Eventuali duplicati:
Traverse a list in reverse order in PythonCome invertire le tuple in Python?
è possibile? Non deve essere a posto, solo cercando un modo per invertire una tupla in modo da poterlo scorrere all'indietro.
Ci sono due modi per farlo idiomatiche:
reversed(x) # returns an iterator
o
x[::-1] # returns a new tuple
Dal tuple sono immutabili, non v'è alcun modo per invertire una tupla sul posto.
Edit: Basandosi sul commento di @ LVC, l'iteratore restituito da reversed
sarebbe equivalente a
def myreversed(seq):
for i in range(len(x) - 1, -1, -1):
yield seq[i]
cioè si basa sulla sequenza di lunghezza nota per evitare di dover effettivamente invertire la tupla.
Per quanto è più efficiente, sospetto che sarebbe lo seq[::-1]
se si sta utilizzando tutto e la tupla è piccola, e reversed
quando la tupla è grande, ma le prestazioni in python sono spesso sorprendenti quindi misuralo!
Grazie, quale sarebbe più veloce? Sembra che iteratore iterazioni su richiesta? In caso affermativo, come lo fa in modo efficace senza invertire la lista prima? Sta invertendo ogni volta che itera? –
@JoanVenge 'reverseed' usa il fatto che' tuple's sono sequenze che iniziano alla fine e lavorano all'indietro, dando ogni elemento su richiesta mentre si tiene traccia di dove si trova. – lvc
@JoanVenge vedi la mia modifica (ty lvc, appena espanso il tuo commento) – tobyodavies
È possibile utilizzare la funzione integrata reversed
.
>>> x = (1, 2, 3, 4)
>>> y = reversed(x)
>>> tuple(y)
(4, 3, 2, 1)
Se si desidera solo per iterare la tupla, si può semplicemente utilizzare l'iteratore restituito da reversed
direttamente senza convertirlo in una tupla di nuovo.
>>> for k in reversed(x):
... print k,
...
4 3 2 1
Simile al modo in cui si invertire una lista, cioè s [:: - 1]
In [20]: s = (1, 2, 3)
In [21]: s[::-1]
Out[21]: (3, 2, 1)
e
In [24]: for i in s[::-1]:
....: print i
....:
3
2
1
Hai provato a usare 'reversed'? – Wes
Ci sono molti duplicati di questa domanda, ma tutti sembrano chiedersi di stringhe o elenchi di tuple. La risposta è la stessa. Esempi: http://stackoverflow.com/questions/931092/reverse-a-string-in-python http://stackoverflow.com/questions/6827413/reverse-does-not-work-on-a-python-literal http://stackoverflow.com/questions/529424/traverse-a-list-in-reverse-order-in-python – agf
Grazie, sì, non riuscivo a trovarne uno che parla esattamente di invertire le tuple ma capisco cosa intendi. –