在Python中迭代N维

2024-10-01 13:36:17 发布

您现在位置:Python中文网/ 问答频道 /正文

让M映射一个包含数据的映射。在

# If it was a 2d map, I could iterate it thusly:
start, size = (10, 10), (3, 3)
for x in range(start[0], start[0]+size[0]):
    for y in range(start[1], start[1]+size[1]):
        M.get((x, y))
# A 3d map would add a for z in ... and access it thusly
M.get((x, y, z))
# And so on.

我的问题是:如何创建一个迭代器来生成正确的迭代序列?也就是说,给定start, size = (10, 10), (3, 3)它将产生2元组序列(10, 10), (10, 11), (10, 12), (11, 10), (11, 11)等,而给定{}它将产生正确的3元组序列。在

是的,我试过了,但是我的头爆炸了。或者我不能证明花时间去弄清楚,尽管这很有趣。选择:)


Tags: 数据inmapforsizegetifrange
2条回答

在Python 2.6+中:

itertools.product(*[xrange(i, i+j) for i,j in zip(start, size)])

使用do it您的自生成表达式:

start, size = (10, 10), (3, 3)
values2=((x+xd,y+yd)
        for x,y in (start,)
        for xr,yr in (size,)
        for xd in range(xr)
        for yd in range(yr))

for x,y in values2:
    print x,y

start, size = (10, 10, 10), (3, 3, 3)
values3=((x+xd,y+yd, z+zd)
        for x,y,z in (start,)
        for xr,yr,zr in (size,)
        for xd in range(xr)
        for yd in range(yr)
        for zd in range(zr))

for x,y,z in values3:
    print x,y,z

相关问题 更多 >