Python中的嵌套for循环与map函数的比较
我正在用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)会返回一个整数(比如,它可以把这三个数字相乘)。请问有没有更快的方法来遍历这些数字,或者使用map函数呢?
谢谢 :)
5 个回答
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)]
2
我觉得你可以用imap来实现这个:
from itertools import imap
result = list(imap(run, range(100), range(100), range(100)))
imap会逐个返回结果……所以如果你想要一个一个地处理这些结果,就不要用list()这个函数。
8
看看这个 itertools模块,特别是里面的 product方法。
这里有个使用的例子:
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)