我想循环一个三维数组.有没有比以下更有效(或更快)的替代方法?
for i, j, k in itertools.product(*map(xrange, (len(x), len(y), len(z))))
Run Code Online (Sandbox Code Playgroud)
在这个例子中,x,y和z是三个一维数组.
我的源代码是这样的,我不想要列表的值.
for i, j, k in itertools.product(*map(xrange, (len(x0), len(y0), len(z0)))):
print "p[%d][%d][%d] = %d" % (x0[i], y0[j], z0[k], p[i][j][k])
Run Code Online (Sandbox Code Playgroud)
p 是3d阵列
为什么不直接在列表循环本身呢?
for i, j, k in itertools.product(x, y, z):
Run Code Online (Sandbox Code Playgroud)
你现在没有指数,你有实际价值:
>>> x, y, z = range(3), range(3, 6), range(6, 9)
>>> for i, j, k in itertools.product(x, y, z):
... print i, j, k
...
0 3 6
0 3 7
0 3 8
0 4 6
# .. ~ ..
2 4 8
2 5 6
2 5 7
2 5 8
Run Code Online (Sandbox Code Playgroud)
如果您还必须拥有索引,只需使用enumerate():
>>> for (ii, i), (jj, j), (kk, k) in itertools.product(*map(enumerate, (x, y, z))):
... print (ii, i), (jj, j), (kk, k)
...
(0, 0) (0, 3) (0, 6)
(0, 0) (0, 3) (1, 7)
(0, 0) (0, 3) (2, 8)
(0, 0) (1, 4) (0, 6)
# .. ~ ..
(2, 2) (1, 4) (2, 8)
(2, 2) (2, 5) (0, 6)
(2, 2) (2, 5) (1, 7)
(2, 2) (2, 5) (2, 8)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
429 次 |
| 最近记录: |