我需要列出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