如何採取列表
回答
from math import log
[log(y,10) for y in x]
import math
x = [1500, 1049.8, 34, 351]
y = [math.log10(num) for num in x]
這叫做list comprehension。它正在做的是創建一個新列表,其元素是將math.log10
應用到原始list
中的相應元素(不是array
)的結果,順便說一下。
我通常在循環結束時避免使用'for x in x',您不會再有'x'列表,只有最後一個元素。 – mgilson 2012-07-25 19:36:08
@mgilson優秀點。我沒有在我的解決方案評論中發佈的示例代碼中做這件事,不知道爲什麼我聽到了(除了我在'textarea'中輸入它,而不是'vim',我想)。我會解決這個問題。 – 2012-07-25 19:58:36
的simpliest的方法是使用一個list comprehension
實施例:
>>> x = [1500, 1049.8, 34, 351]
>>> import math
>>> [math.log10(i) for i in x]
[3.1760912590556813, 3.021106568432122, 1.5314789170422551, 2.545307116465824]
>>>
的另一種方法是使用map函數
示例:
>>> map(math.log10, x)
[3.1760912590556813, 3.021106568432122, 1.5314789170422551, 2.545307116465824]
>>>
非常感謝! – 2012-07-25 19:11:33
您也可以使用map
內置函數:
import math
new_list = map(math.log10, old_list)
這將可能是微不足道比列表理解得更快。我在這裏添加它主要是爲了顯示兩者之間的相似性。
編輯(響應由@HankGay評論)
爲了證明地圖稍快在這種情況下,我寫了一個小的基準:
import timeit
for i in range(10):
t=timeit.timeit("map(math.log10,a)",setup="import math; a=range(1,100)")
print "map",t
t=timeit.timeit("[math.log10(x) for x in a]",setup="import math; a=range(1,100)")
print "list-comp",t
這裏有我的筆記本電腦(OS-X 10.5.8,CPython的2.6)結果:
map 24.5870189667
list-comp 32.556563139
map 23.2616219521
list-comp 32.0040669441
map 23.9995992184
list-comp 33.2653431892
map 24.1171340942
list-comp 33.0399811268
map 24.3114480972
list-comp 33.5015368462
map 24.296754837
list-comp 33.5107491016
map 24.0294749737
list-comp 33.5332789421
map 23.7013399601
list-comp 33.1543111801
map 24.41685009
list-comp 32.9259850979
map 24.1111209393
list-comp 32.9298729897
重要的是要認識到,速度不是一切,但。 「可讀性很重要」。如果map
創建了一些難以閱讀的內容,那麼肯定會列出理解。
地圖功能似乎是非常有用的。謝謝。 – 2012-07-25 19:11:52
如果'map'比列表組件更快,我會非常震驚,至少在CPython上。 wazoo優化了列表組件的CPython實現。如果我得到一些停機時間,我可能會設置一個微基準測試,我們都知道這是一個非常有用的工具:-) – 2012-07-25 19:16:16
@HankGay - 查看我的更新。對於這個簡單的測試案例,「map」比等效列表comp快近50%。 – mgilson 2012-07-25 19:32:02
- 1. 爪哇如何採取陣列
- 2. 如何採取最後一個記錄從列表
- 3. 如何讓孩子列表元素水平,並採取全寬
- 4. XSLT轉換列表,並採取最大
- 5. 有列表項採取一切高度
- 6. 如何採取相同的索引元素從列表中有2所列出
- 7. C#:如何採取屏幕
- 8. 如何採取MongoDB備份
- 9. 如何採取從整數
- 10. 如何採取虛框
- 11. 如何採取運行
- 12. 數據庫不採取表
- 13. 採取非空值從2列7列的表
- 14. ř如何作爲採樣大小採樣data.frame的列表,與矢量
- 15. 如何重新採樣/下采樣不規則的時間戳列表?
- 16. 如何獲取列表的列表?
- 17. 如何採取從哈斯克爾元組列表中的特定值?
- 18. 如何採取的參數列表與非靜態名anp.net.mvc-5 C#
- 19. 你如何採取一個嵌套的列表和詛咒顯示呢?
- 20. 如何採取列的指數,並用awk
- 21. 熊貓:如何採取一系列的每n行
- 22. 如何獲取列表
- 23. 如何獲取表列值?
- 24. 如何獲取列表
- 25. IOS UITableview如何在表格動畫完成後採取行動
- 26. 如何採取全圖的mapbox IOS SDK
- 27. 如何讓Pool.map採取lambda函數
- 28. 如何採取串出一組在AWK
- 29. JAXB /如何採取文本元素
- 30. 如何採取從Oracle行用逗號
或使用'log10';)'這通常比log(x,10)更準確。' – phant0m 2012-07-25 19:07:51