私信  •  关注

Community Tomalak

Community Tomalak 最近创建的主题
Community Tomalak 最近回复了
6 年前
回复了 Community Tomalak 创建的主题 » 何时在python中使用map()[重复]

所以自从python 3之后, map() 是迭代器,您需要记住您需要什么:迭代器 list 对象。

已经是@alexmartelli了 mentioned , MAP() 如果你不使用 lambda 功能。

我会给你一些时间比较。

python 3.5.2和cpython
我已经用过 Jupiter notebook 尤其是 %timeit 内置魔术指令
测量 :s==1000ms==1000*1000s=1000*1000*1000ns

设置:

x_list = [(i, i+1, i+2, i*2, i-9) for i in range(1000)]
i_list = list(range(1000))

内置功能:

%timeit map(sum, x_list)  # creating iterator object
# Output: The slowest run took 9.91 times longer than the fastest. 
# This could mean that an intermediate result is being cached.
# 1000000 loops, best of 3: 277 ns per loop

%timeit list(map(sum, x_list))  # creating list with map
# Output: 1000 loops, best of 3: 214 µs per loop

%timeit [sum(x) for x in x_list]  # creating list with list comprehension
# Output: 1000 loops, best of 3: 290 µs per loop

兰姆达 功能:

%timeit map(lambda i: i+1, i_list)
# Output: The slowest run took 8.64 times longer than the fastest. 
# This could mean that an intermediate result is being cached.
# 1000000 loops, best of 3: 325 ns per loop

%timeit list(map(lambda i: i+1, i_list))
# Output: 1000 loops, best of 3: 183 µs per loop

%timeit [i+1 for i in i_list]
# Output: 10000 loops, best of 3: 84.2 µs per loop

还有生成器表达式,请参见 PEP-0289 . 所以我觉得把它加到比较中是有用的

%timeit (sum(i) for i in x_list)
# Output: The slowest run took 6.66 times longer than the fastest. 
# This could mean that an intermediate result is being cached.
# 1000000 loops, best of 3: 495 ns per loop

%timeit list((sum(x) for x in x_list))
# Output: 1000 loops, best of 3: 319 µs per loop

%timeit (i+1 for i in i_list)
# Output: The slowest run took 6.83 times longer than the fastest. 
# This could mean that an intermediate result is being cached.
# 1000000 loops, best of 3: 506 ns per loop

%timeit list((i+1 for i in i_list))
# Output: 10000 loops, best of 3: 125 µs per loop

你需要 列表 对象:

使用列表理解如果是自定义函数,则使用 list(map()) 如果有内置函数

你不需要 列表 对象,你只需要一个可接受的:

总是使用 MAP() !