2011-07-09 119 views
3

我有一個看起來像這樣的列表:蟒蛇array_walk()替代

list = [1,2,3,4] 

我想補充12到每個值。在PHP中,您可以使用array_walk處理數組中的每個項目。是否有一個類似的功能或更簡單的方法不是做一個for循環,例如:

for i in list: 

感謝

回答

4
my_list = [e+12 for e in my_list] 

或:

for i in range(len(my_list)): 
    my_list[i] += 12 
4
alist = map(lambda i: i + 12, alist) 

更新:@Daenyth說,在評論,這是不是因爲使用lambda的函數調用的開銷清單理解慢。看起來他們是對的,這裏是從我的機器(Macbook Air的,1.6GHz的Core Duo處理器,4GB,Python的2.6.1)的統計數據:

腳本:

import hotshot, hotshot.stats 

def list_comp(alist): 
    return [x + 12 for x in alist] 

def list_map(alist): 
    return map(lambda x: x + 12, alist) 

def run_funcs(): 
    alist = [1] * 1000000 
    result = list_comp(alist) 
    result = list_map(alist) 


prof = hotshot.Profile('list-manip.prof') 
result = prof.runcall(run_funcs) 

stats = hotshot.stats.load('list-manip.prof') 
stats.strip_dirs() 
stats.sort_stats('time', 'calls') 
stats.print_stats() 

結果:

  1000003 function calls in 0.866 CPU seconds 

    Ordered by: internal time, call count 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.465 0.465 0.683 0.683 untitled.py:6(list_map) 
    1000000 0.218 0.000 0.218 0.000 untitled.py:7(<lambda>) 
     1 0.157 0.157 0.157 0.157 untitled.py:3(list_comp) 
     1 0.025 0.025 0.866 0.866 untitled.py:9(run_funcs) 
     0 0.000    0.000   profile:0(profiler) 
+1

這很可能是最快的方法。 –

+1

@Gerardo Marset:實際上它比listcomp慢,因爲函數查找的開銷。另一篇文章中的一些人對它進行了計時。 – Daenyth