在Python中创建2D点列表的更优雅的方法

在Python中创建2D点列表的更优雅的方法,python,list,2d,Python,List,2d,我需要在python中创建一个2D点x,y的列表。 这就行了 l = [] for x in range (30,50,5): for y in range (1,10,3): l.append((x,y)) 因此:打印l将生成: [(30, 1), (30, 4), (30, 7), (35, 1), (35, 4), (35, 7), (40, 1), (40, 4), (40, 7), (45, 1), (45, 4), (45, 7)] 有更优雅的方法吗?您

我需要在python中创建一个2D点x,y的列表。 这就行了

l = []

for x in range (30,50,5):
    for y in range (1,10,3):
        l.append((x,y))
因此:打印l将生成:

[(30, 1), (30, 4), (30, 7), (35, 1), (35, 4), (35, 7), (40, 1), (40, 4), (40, 7), (45, 1), (45, 4), (45, 7)]
有更优雅的方法吗?

您可以使用:

您可以使用:

使用:

它的伸缩性更好,应该比生成器表达式、列表理解或显式循环更快。

使用:


它比生成器表达式、列表理解、,或者显式循环。

如果只是将生成器表达式转换为列表,则使用生成器表达式毫无意义。@srgerg:出于好奇-为什么要将生成器表达式传递给列表而不是使用列表理解?根据我的答案生成器表达式中链接到的python文档。。。倾向于比等效的列表理解更便于记忆。@是的,如果生成器表达式的结果被转换为列表,那么这就变成了列表理解。我将其转换为list,因为该问题要求列表结果,并且使我能够显示表达式的结果。OP可能会删除对列表的转换,并在自己的代码中使用更高效的生成器表达式,但如果没有更多上下文信息,我无法确定。谢谢。我认为这个解决方案是好的。我只是从C++切换到Python,所以想学习python的事情。我只需要生成一个要在图像中处理的像素位置列表。我使用列表是因为这个处理的结果将生成一个有序的列表,然后对其进行分析、删减,排序后的结果是一个索引列表,指示原始列表中所需的像素。如果只是将生成器表达式转换为列表,则使用生成器表达式没有意义。@srgerg:出于好奇-为什么要将生成器表达式传递给列表,而不是使用列表理解?根据“我的答案生成器”中链接的python文档表达。。。倾向于比等效的列表理解更便于记忆。@是的,如果生成器表达式的结果被转换为列表,那么这就变成了列表理解。我将其转换为list,因为该问题要求列表结果,并且使我能够显示表达式的结果。OP可能会删除对列表的转换,并在自己的代码中使用更高效的生成器表达式,但如果没有更多上下文信息,我无法确定。谢谢。我认为这个解决方案是好的。我只是从C++切换到Python,所以想学习python的事情。我只需要生成一个要在图像中处理的像素位置列表。我使用列表是因为这个处理的结果将生成一个有序的列表,然后对该列表进行分析、修剪和排序,结果是一个索引列表,指示您希望在原始列表中显示的像素。
>>> l = list((x, y) for x in range(30, 50, 5) for y in range(1, 10, 3))
>>> l
[(30, 1), (30, 4), (30, 7), (35, 1), (35, 4), (35, 7), (40, 1), (40, 4), (40, 7), (45, 1), (45, 4), (45, 7)]
l = [(x,y) for x in range(30,50,5) for y in range(1,10,3)]
from itertools import product
l = list(product(range(30,50,5), range(1,10,3)))