質問は本当にタイトルが何を言っているのかです。
質問の理由: map
func は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)
出力 (Windows 7 (64 ビット) I-3 第 2 世代):
>>>
3.4691164256
3.5064888507
出力 (Windows 7 (32 ビット) core2duo):
>>>
5.58571625252
6.25803459664
私はPython 2.7.3を使用していることに言及する必要があると思います.Python map
3ではジェネレーターですが、Python 2ではそうではないため、この「問題」はPython 3では再現できません.
アップデート:
アトムは不変であるべきだと言った人たちに対処するために、別のバージョンのセットアップを次に示します (速度は遅くなりますが、それでも違いが示されます)。
setup = '''
def translate(x):
return tuple(i+1 for i in x)
atoms = [(1,1,1,1)]*1000
'''
出力 (Windows 7 (32 ビット) core2duo):
>>>
31.0213507144
29.7194933508