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

use*_*710 1 python 2d list

我需要在python中创建一个2D点(x,y)列表.这样做

l = []

for x in range (30,50,5):
    for y in range (1,10,3):
        l.append((x,y))
Run Code Online (Sandbox Code Playgroud)

所以:print 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)]
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?

agf*_*agf 13

用途itertools.product:

from itertools import product
l = list(product(range(30,50,5), range(1,10,3)))
Run Code Online (Sandbox Code Playgroud)

它可以更好地扩展,并且应该比生成器表达式,列表理解或显式循环更快.


Vau*_*ato 8

l = [(x,y) for x in range(30,50,5) for y in range(1,10,3)]
Run Code Online (Sandbox Code Playgroud)