Credo che sia meglio per confrontarli con il tempo di esecuzione ...
a = ['A:1','B:2','C:3','D:4']
def case1():
dc = {}
for i in a:
q, w = i.split(':')
dc[q]=w
def case2():
dict(x.split(":") for x in a)
def case3():
{x.split(":")[0] : x.split(":")[1] for x in a}
%timeit -n 100000 case1()
>> 100000 loops, best of 3: 1.95 us per loop
%timeit -n 100000 case2()
>> 100000 loops, best of 3: 3.05 us per loop
%timeit -n 100000 case3()
>> 100000 loops, best of 3: 3.39 us per loop
Testato per 100.000
loop e 3 test per ogni ciclo. Come puoi vedere, il tempo di esecuzione più veloce appartiene a case1()
: standard for loop
.
Risultato: 1 metodi di copertina non significa che essi sono più veloci, infatti, di base for
ciclo è in genere il modo più veloce per andare.
Aggiornamento: risultati per un elenco di 13312 articoli, l'elenco di base contiene 26 elementi, il resto sono le copie di quegli elementi che contengono l'elenco. Timing è calcolato oltre 1000 loop e meglio di 3 per ogni ciclo
%timeit -n 1000 case3()
1000 loops, best of 3: 9.49 ms per loop
%timeit -n 1000 case2()
1000 loops, best of 3: 5.79 ms per loop
%timeit -n 1000 case1()
1000 loops, best of 3: 5.55 ms per loop
Aggiornamento 2: Prova finale avviene con una lista di 27262976
elementi totali, lista di base hanno 26 articoli, resto sono le copie di tali articoli wtihin la lista. Il tempo è calcolato su 10 loop e il migliore di 3 per ogni loop (poiché l'esecuzione di una lista molto lunga richiede molto tempo).
%timeit -n 10 case1()
10 loops, best of 3: 11.4 s per loop
%timeit -n 10 case2()
10 loops, best of 3: 12.1 s per loop
%timeit -n 10 case3()
10 loops, best of 3: 20.2 s per loop
credo che non ci sia qualcosa di più efficiente di quello. Ricorda che "meno righe" non è uguale a "più veloce". Tutto si riduce a come il linguaggio espande quelle linee. – LtWorf
La mia risposta di confronto viene aggiornata, che confronta le risposte correlate per gli elenchi brevi (4 elementi), lungo (13312 elementi) e molto lungo (27262976 voci). – FallenAngel