2016-09-06 111 views
-1

我正在從一個文件中讀取行,並希望將它們轉換爲一個整數列表。該文件有一百萬行。因此,我只是想知道哪個過程會使它更快..say, lst=['10','12','31','41','15']是從文件中讀取的當前行。 我能做到使用地圖功能鑄件,喜歡 - lst1=map(int,lst) 或使用的功能,喜歡 - lst2=[int(x) for x in lst] 哪一個將是最有效的,並做最快的方法?類型鑄造程序之間的性能比較

+0

除非每個列表都很長,否則地圖不會快得多,你如何將文件內容讀入每個列表?同時計算每個實施將回答你的問題,所以你可以真正回答這個問題。 –

+0

沒有「for function」。它被稱爲[list comprehension](https://docs.python.org/3.5/tutorial/datastructures.html#list-comprehensions)。 「地圖」和列表解析將具有相似的性能。無論如何,文件I/O可能會成爲瓶頸。 –

+1

我建議你閱讀[哪個更快?](https://ericlippert.com/2012/12/17/performance-rant/) – CoryKramer

回答

0

[int(x, 10) for x in lst]比你的兩個方面至少顯著快:

>>> from timeit import timeit 
>>> setup = "lst = ['10','12','31','41','15']" 

>>> timeit('map(int, lst)', setup) 
4.454881024529442 

>>> timeit('[int(x) for x in lst]', setup) 
4.7153410495946275 

>>> timeit('[int(x, 10) for x in lst]', setup) 
1.6508196962672343 

測試與Python 2.7.11(我假設你使用Python 2,否則你lst1=map(...)會產生誤導)。

+0

謝謝,我真的很感激。 –

+0

在Python 3上,我看到可忽略的性能差異。事實上,我的理解速度稍快一點,實際上,list(map(int,lst))是最快的方法,同樣也只是略微。這是在Python 3中修復的Python 2中的問題嗎? –

+0

@ juanpa.arrivillaga是的,在Python 3中,我也得到了微小的差異,所有1.25秒左右。不知道爲什麼它在Python 2和3之間有很大的不同。我只知道一些「爲什麼float比int更快」的explicit-base-10「trick」,可能是[this](https:// www。 reddit.com/r/Python/comments/2grsb5/why_is_int_slower_than_float_when_converting_a/),也許你可以在這裏找到更多的解釋。 –