如何有效地找到二维平面中所有坐标的排列



我需要列出2D平面的所有坐标,x和y轴的范围从0到1066。我找到的大多数答案都建议事先创建一个x和y轴所有值的列表,但我认为这不是最有效的,因为结果会有1067^2个元素。列表应该是这样的:

CCD_ 1。

由于顺序很重要,我一直在考虑使用排列,但我仍在寻找最佳方法。

您可以创建一个生成器,用于迭代每一对坐标,而无需创建一个相当大的值列表:

作为生成器表达式:

sizex, sizey = 3, 3   # replace with your own values
g = ((x, y) for x in range(sizex) for y in range(sizey))
print(type(g))
for coord in g:
print(coord)

输出:

<class 'generator'>
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
(2, 0)
(2, 1)
(2, 2)

作为lambda函数的生成器:

sizex, sizey = 3, 3   # replace with your own values
g = lambda sizex, sizey: ((x, y) for x in range(sizex) for y in range(sizey))
print(type(g))
for coord in g(sizex, sizey):
print(coord)

out:

<class 'function'>
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
(2, 0)
(2, 1)
(2, 2)

作为常规函数:

def g(sizex, sizey):
for x in range(sizex):
for y in range(sizey):
yield(x, y)

sizex, sizey = 3, 3   # replace with your own values
print(type(g))
for coord in g(sizex, sizey):
print(coord)

使用笛卡尔乘积创建延迟加载

impot itertools
mx, my = 1066, 1066
for x, y in itertools.product(range(mx), range(my)):
print(x, y)
0 0
0 1
0 2
.
.
.
1065 1063
1065 1064
1065 1065

最新更新