与map函数相比,Python中嵌套for循环

时间:2011-09-07 07:32:04

标签: python loops

我正在使用python,目前有以下代码:

list = []
for a in range(100):
    for b in range(100):
        for c in range(100):
            list.append(run(a,b,c))

其中run(a,b,c)返回一个整数(例如,它可以将这三个数字相乘)。是否有更快的方法来循环这些数字或使用地图功能?

谢谢:)

5 个答案:

答案 0 :(得分:8)

查看itertools-module,特别是product method

示例用法:

for i in itertools.product(range(0,100), repeat=3):
    #do stuff with i
    list.append(run(i[0],i[1],i[2]))

请注意,函数调用可以缩短为:

list.append(run(*i))

在上面的例子中。有关解压缩参数列表的说明,请参阅docs.python.org

例如,product(range(0,2), repeat=3))的输出如下所示:

(0, 0, 0)
(0, 0, 1)
(0, 1, 0)
(0, 1, 1)
(1, 0, 0)
(1, 0, 1)
(1, 1, 0)
(1, 1, 1)

答案 1 :(得分:2)

我认为你可以使用imap来做到这一点:

from itertools import imap
result = list(imap(run, range(100), range(100), range(100)))

imap产生结果......所以如果你想迭代结果不要使用list()

答案 2 :(得分:1)

from itertools import product
my_list = [run(a, b, c) for a, b, c in product(xrange(100), xrange(100), xrange(100))]

或者:

from itertools import product
my_list = [run(a, b, c) for a, b, c in product(xrange(100), repeat=3)]

答案 3 :(得分:0)

import itertools    
li = [run(*triple) for triple in itertools.product(xrange(100), repeat=3)]

答案 4 :(得分:0)

另一种选择,取决于您想要做的事情:

my_array = numpy.tile(numpy.arange(100),(3,1)).T
def run(row):
    return numpy.prod(row, 0)
[run(row) for row in my_array]

当然,这一切都取决于run,例如如果你想购买产品,你也可以在整个阵列上运行,这要快得多:

my_product = run(my_array.T)
my_product = numpy.prod(my_array, 1)