Aynı sorun vardı ve her çözümün performansını merak ettim.
İşte %timeit
:
import numpy as np
lst = [['a','b','c'], [1,2,3], ['x','y','z']]
Diziyi dönüştüren ilk numpy-yolu:
%timeit list(np.array(lst).T[0])
4.9 µs ± 163 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Liste kavrama özelliğini kullanarak tamamen yerel (@alecxe tarafından açıklandığı gibi):
%timeit [item[0] for item in lst]
379 ns ± 23.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Başka bir yerel yöntem zip
(@dawg tarafından açıklandığı gibi):
%timeit list(zip(*lst))[0]
585 ns ± 7.26 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
İkinci numpy-yolu. Ayrıca @dawg:
%timeit list(np.array(lst)[:,0])
4.95 µs ± 179 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Şaşırtıcı bir şekilde (iyi, en azından benim için) liste kavrayışı kullanan yerel yol, en hızlı ve yaklaşık 10 kat daha hızlıdır. Final olmadan iki numpy yolunu çalıştırmaklist
, hala 10x farkında olan yaklaşık bir µs tasarrufu sağlar.
Her kod snippet'ini bir çağrı ile kuşattığımda len
, Jeneratörlerin sonuna kadar çalışmasını sağlamak için zamanlamanın aynı kaldığını unutmayın.