如何记录列表中的所有元素

Dax*_*liz 20 python arrays

我有一个阵列

x = [1500, 1049.8, 34, 351, etc]
Run Code Online (Sandbox Code Playgroud)

如何获取整个数组的log_10()?

jme*_*etz 35

numpy会为你做那件事.

import numpy
numpy.log10(mat)
Run Code Online (Sandbox Code Playgroud)

注意

mat并不一定是一个numpy数组来工作,并且numpy应该比使用列表理解更快,如其他答案所示.

  • 谁说这是一些简单的脚本? (2认同)

phi*_*mue 17

from math import log
[log(y,10) for y in x]
Run Code Online (Sandbox Code Playgroud)

  • 或者使用`log10`;)`这通常比log(x,10)更准确 (7认同)

slo*_*oth 9

最简单的方法是使用列表理解


例:

>>> x = [1500, 1049.8, 34, 351]
>>> import math
>>> [math.log10(i) for i in x]
[3.1760912590556813, 3.021106568432122, 1.5314789170422551, 2.545307116465824]
>>> 
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用map函数


例:

>>> map(math.log10, x)
[3.1760912590556813, 3.021106568432122, 1.5314789170422551, 2.545307116465824]
>>> 
Run Code Online (Sandbox Code Playgroud)


mgi*_*son 9

你也可以使用map内置函数:

import math
new_list = map(math.log10, old_list)
Run Code Online (Sandbox Code Playgroud)

这可能比列表理解速度快得多.我在这里添加它主要是为了显示两者之间的相似性.

编辑(回应@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
Run Code Online (Sandbox Code Playgroud)

以下是我的笔记本电脑上的结果(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
Run Code Online (Sandbox Code Playgroud)

重要的是要意识到速度不是一切."可读性很重要".如果map创造了一些难以阅读的东西,那么一定要进行列表理解.

  • 并且,或许这个链接(http://stackoverflow.com/questions/1247486/python-list-comprehension-vs-map)应该作为主题的权威参考... (2认同)

Han*_*Gay 5

import math
x = [1500, 1049.8, 34, 351]
y = [math.log10(num) for num in x]
Run Code Online (Sandbox Code Playgroud)

这称为列表理解。它是什么做的是创造一个新的列表,其元素是应用的结果,math.log10在原为相应的元素list,这是不是一个array,顺便说一句。