我想迭代一个2D列表。我知道我可以这样做:
for j in range(columns):
for i in range(rows):
print depth[i][j],但有没有更漂亮的方法。我试过:
for (x in range(rows)) and (y in range(columns)):
print(depth[x][y])但这给了我一个IndentationError。
谢谢
编辑:,如果我想为x和y设置界限,假设我有一个4x4矩阵(使用列表来表示它)。对于给定的元素,我希望在它周围得到3x3矩阵,但我希望保持在原始矩阵的范围内。假设我在(3,1),取x = range(3-2, 3+3) = [1,2,3,4,5]和y = range(1-2,1+3) = [-1, 0, 1, 2, 3]将使我超出原矩阵的界限。
发布于 2014-04-19 07:06:37
可以使用itertools.product,也可以编写双循环生成器表达式,如下所示:
for (i,j) in ( (i,j) for i in range(rows) for j in range(columns) ):
print depth[i][j]或
for d in ( depth[i][j] for i in range(rows) for j in range(columns) ): ...此外,如果实际上不需要索引,但只需要迭代depth的值,则可以这样做:
for row in depth:
for v in row:
print而且即使你确实需要索引,使用enumerate也要更多地是仿生的。
for row_index, row in enumerate(depth):
for col_index, v in enumerate(row):
print 'depth[%d][%d]=%s' % (row_index, col_index, v)发布于 2014-04-19 07:06:18
这可以通过以下方式来完成:
for depth in (depth[x][y] for x in range(rows) for y in range(columns)):
print depth编辑:
如果需要边界,可以使用min和max内置程序:
for x in range( max(x_min,col-2), min(x_max,col+3) ):
#do stuffhttps://stackoverflow.com/questions/23166996
复制相似问题