2012-11-14 14 views
8

Ho un tuple/list all'interno di una lista come questa:valori di swap in una tupla/lista all'interno di una lista in Python?

[('foo','bar'),('foo1','bar1'),('foofoo','barbar')] 

Qual è il modo più veloce in Python (in esecuzione su una macchina molto bassa cpu/ram) per scambiare i valori come questo ...

[('bar','foo'),('bar1','foo1'),('barbar','foofoo')] 

attualmente in uso:

for x in mylist: 
    self.maynewlist.append((_(x[1]),(x[0]))) 

È esiste un modo migliore o più veloce ???

risposta

7

È possibile utilizzare la mappa:

map (lambda t: (t[1], t[0]), mylist) 

o una lista di comprensione:

[(t[1], t[0]) for t in mylist] 

di lista sono preferiti e presumibilmente molto più veloce di carta quando è necessaria lambda, tuttavia notare che di lista ha un rigoroso di valutazione, che è essa sarà valutata non appena viene legato a variabili, se siete preoccupati per il consumo di memoria utilizzare un generatore di invece:

g = ((t[1], t[0]) for t in mylist) 
#call when you need a value 
g.next() 

Ci sono alcuni dettagli qui: Python List Comprehension Vs. Map

+0

Il fatto è che ho bisogno che la lista invertita per un componente enigma2 GUI, che significa ho bisogno di un elenco completo (più di 1000 tuple in tale elenco) invertita. La comprensione delle liste è la strada giusta allora? – subixonfire

+0

@ user1824571 molto probabilmente – iabdalkader

5

È possibile utilizzare reversed come questo:

tuple(reversed((1, 2)) == (2, 1) 

per applicarlo a un elenco, è possibile utilizzare map o una lista di comprensione:

map(tuple, map(reversed, tuples))  # map 
[tuple(reversed(x)) for x in tuples] # list comprehension 

Se siete interessati in primo luogo in termini di velocità di esecuzione, posso solo racc e che profili i vari approcci e scegli il più veloce.