在某些情况下,for循环比map更快吗?

pra*_*nsg 0 python map

问题实际上是标题所说的.

的原因的问题:
mapFUNC比较慢for在下面的代码循环.
是因为我的代码中存在某些问题,还是还有其他问题?

码:

import timeit

setup = '''
def translate(x):
    x[1]+=1
    x[2]+=1
    x[3]+=1

atoms = [[1,1,1,1]]*1000
'''
smt1 = '''for i in atoms: translate(i)'''
smt2 = '''map(translate, atoms)'''

time_for = timeit.Timer(setup=setup, stmt=smt1)
time_map = timeit.Timer(setup=setup, stmt=smt2)

print time_for.timeit(10000)
print time_map.timeit(10000)
Run Code Online (Sandbox Code Playgroud)

输出(Windows 7(64位)I-3 2nd gen):

>>> 
3.4691164256
3.5064888507
Run Code Online (Sandbox Code Playgroud)

输出(Windows 7(32位)core2duo):

>>>
5.58571625252
6.25803459664
Run Code Online (Sandbox Code Playgroud)

我想我应该提到我使用的是Python 2.7.3,所以虽然map在Python 3中是一个生成器,但在Python 2中并非如此,所以这个"问题"无法在Python 3上复制.


更新:

为了解决那些说原子应该是不可变的人,这里有一个不同版本的设置(它更慢,但仍然显示差异):

setup = '''
def translate(x):
    return tuple(i+1 for i in x)

atoms = [(1,1,1,1)]*1000
'''
Run Code Online (Sandbox Code Playgroud)

输出(Windows 7(32位)core2duo):

>>> 
31.0213507144
29.7194933508
Run Code Online (Sandbox Code Playgroud)

Tho*_*ash 5

那是因为map创建了一个新结构,而for只修改了当前结构.