Более элегантный способ создания списка 2D точек в Python - PullRequest
1 голос
/ 15 марта 2012

Мне нужно создать список 2D точек (x, y) в python.Это сделает это

l = []

for x in range (30,50,5):
    for y in range (1,10,3):
        l.append((x,y))

Итак: 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)]

Есть ли более элегантный способ сделать это?

Ответы [ 3 ]

13 голосов
/ 15 марта 2012

Использование itertools.product:

from itertools import product
l = list(product(range(30,50,5), range(1,10,3)))

Он масштабируется лучше и должен быть быстрее, чем выражение генератора, понимание списка или явные циклы.

8 голосов
/ 15 марта 2012
l = [(x,y) for x in range(30,50,5) for y in range(1,10,3)]
1 голос
/ 15 марта 2012

Вы можете использовать выражение генератора :

>>> 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)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...