我正在從一個文件中讀取行,並希望將它們轉換爲一個整數列表。該文件有一百萬行。因此,我只是想知道哪個過程會使它更快..say, lst=['10','12','31','41','15']
是從文件中讀取的當前行。 我能做到使用地圖功能鑄件,喜歡 - lst1=map(int,lst)
或使用的功能,喜歡 - lst2=[int(x) for x in lst]
哪一個將是最有效的,並做最快的方法?類型鑄造程序之間的性能比較
回答
[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(...)
會產生誤導)。
謝謝,我真的很感激。 –
在Python 3上,我看到可忽略的性能差異。事實上,我的理解速度稍快一點,實際上,list(map(int,lst))是最快的方法,同樣也只是略微。這是在Python 3中修復的Python 2中的問題嗎? –
@ 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/),也許你可以在這裏找到更多的解釋。 –
- 1. 變量鑄造性能比較
- 2. OCaml類型鑄造之間的區別
- 3. C#鑄造類型之間的差異
- 4. 鑄造類型之間的區別
- 5. C型鑄造和功能鑄造之間有什麼區別?
- 6. VB DataView.RowFilter和鑄造之前比較
- 7. ResultSet類型之間的JDBC只讀性能比較
- 8. 鑄造比較器爲子類工作
- 9. 什麼是可比較的類型鑄造&Map.Entry?
- 10. 鑄造到id之間的區別比實際類的類型,目標C
- 11. 鑄造類型
- 12. Java編程,類型鑄造
- 13. 比較Ext.data.JsonReader和Ext.data.ArrayReader之間的性能
- 14. 在Java中的類型鑄造/鑄造
- 15. 鑄造型到屬性類型
- 16. 在繼承的分類之間鑄造
- 17. C中類似類型之間的鑄造#
- 18. 鑄造一個可比,然後比較
- 19. 比較HTML5和Flash應用程序之間的性價比
- 20. 鑄造從類型類型
- 21. 類型比較的性能成本
- 22. Java泛型在接口之間鑄造
- 23. 結構之間的鑄造?
- 24. flex3類型鑄造
- 25. 類型鑄造datetime
- 26. SQL類型鑄造
- 27. Windbg類型鑄造
- 28. Python類型鑄造
- 29. Oracle類型鑄造
- 30. VB.NET - 鑄造類型
除非每個列表都很長,否則地圖不會快得多,你如何將文件內容讀入每個列表?同時計算每個實施將回答你的問題,所以你可以真正回答這個問題。 –
沒有「for function」。它被稱爲[list comprehension](https://docs.python.org/3.5/tutorial/datastructures.html#list-comprehensions)。 「地圖」和列表解析將具有相似的性能。無論如何,文件I/O可能會成爲瓶頸。 –
我建議你閱讀[哪個更快?](https://ericlippert.com/2012/12/17/performance-rant/) – CoryKramer