最快的pythonic方式来生产i,j组合

时间:2014-12-01 07:45:04

标签: python itertools

我想生成一个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

但是,如果n8e6m200(就像我的情况一样),则此循环嵌套会变得非常慢。

  • 以类似C的速度制作这种组合是否有一个简单的程序?
  • 还有其他方法吗?

提前致谢。

2 个答案:

答案 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.productgenerator功能更快(相当长的时间)。

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