Python中的嵌套for循环与map函数的比较

4 投票
5 回答
1974 浏览
提问于 2025-04-17 01:39

我正在用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)

撰写回答