如何采取列表
回答
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