我正在使用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)返回一个整数(例如,它可以将这三个数字相乘)。是否有更快的方法来循环这些数字或使用地图功能?
谢谢:)
答案 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)