我想生成一个i,j
向量,其中每个i
与每个j
结合使用,代码的简单版本就是:
n = 5
m = 3
for i in range(n):
for j in range(m):
print str(i) + ',' + str(j)
由于:
0,0
0,1
0,2
1,0
1,1
1,2
2,0
2,1
2,2
3,0
3,1
3,2
4,0
4,1
4,2
但是,如果n
为8e6
且m
为200
(就像我的情况一样),则此循环嵌套会变得非常慢。
提前致谢。
答案 0 :(得分:3)
您可以使用生成器:
g = ((i,j) for i in xrange(5) for j in xrange(3))
for tup in g:
print str(tup[0]) + ',' + str(tup[1])
答案 1 :(得分:2)
使用itertools.product
生成项目的笛卡尔积。
from itertools import product
list(product(xrange(5), xrange(3)))
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1), (4, 2)]
In [13]: %timeit list(product(xrange(5), xrange(3)))
100000 loops, best of 3: 1.98 µs per loop
您的方法: -
for i in range(5):
for j in range(3):
print str(i) + ',' + str(j)
100000 loops, best of 3: 7.33 µs per loop
Itertools.product
比generator
功能更快(相当长的时间)。
def solve():
a = ((i,j) for i in xrange(5) for j in xrange(3))
for i in a:
print i
In [10]: %timeit solve()
100000 loops, best of 3: 3.25 µs per loop