python array_walk()替代

时间:2011-07-09 02:30:42

标签: python

我有一个如下所示的列表:

list = [1,2,3,4]

我想为每个值添加12。在PHP中,您可以使用array_walk处理数组中的每个项目。有没有类似的函数或更简单的方法比执行for循环,如:

for i in list:

由于

3 个答案:

答案 0 :(得分:11)

使用list comprehensions。试试这个:

list = [i+12 for i in list]

答案 1 :(得分:4)

my_list = [e+12 for e in my_list]

或:

for i in range(len(my_list)):
    my_list[i] += 12

答案 2 :(得分: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)