... 100.000
döngüler ve her döngü için 3 test için test edilmiştir
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
. Gördüğünüz gibi, en hızlı yürütme süresi case1()
'a ait: standart for loop
.
Sonuç: 1 liner yöntemleri daha hızlı olduklarını göstermez, aslında temel for
döngü genellikle gitmek için en hızlı yoldur.
Güncelleme: sonuçları için 13312 ürün, temel liste 26 öğeyi, kalanı bu listenin kopyalarını listele vb. 26 ürün var, gerisi bu öğelerin kopyalarıdır Son test 27262976
toplam öğe listesi ile gerçekleşir temel listesi: Zamanlama her döngü
%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
Güncelleme 2 için 3 iyi 1000 döngüler üzerinden hesaplanan ve Bu liste. Zamanlama, her döngü için 10 döngüden ve en iyi 3'ten hesaplanır (çok uzun bir listenin yürütülmesi büyük zaman alır).
%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
Ben bundan daha verimli bir şey olmadığına inanıyorum. "Daha az satırın" "hızlı" ile aynı olmadığını unutmayın. Her şey dilin bu çizgileri nasıl genişlettiğine bağlı. – LtWorf
Karşılaştırma yanıt güncellendi, kısa (4 öğe), uzun (13312 öğeler) ve çok uzun (27262976 öğe) listelerle ilgili cevapları karşılaştırır. – FallenAngel