2012-03-15 3 views
0

Мне нужно создать список двумерных точек (x, y) в python. Это будет делать этоБолее элегантный способ создания списка двумерных точек в 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)] 

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

ответ

1

Вы можете использовать generator expression:

>>> 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)] 
+3

Нет смысла использовать выражение генератора, если вы просто преобразуете его в список. – Dikei

+0

@srgerg: из любопытства - зачем передавать выражение генератора в 'list()' вместо использования понимания списка? –

+0

Согласно документации на python, связанной с моим ответом «Выражения генератора ... имеют тенденцию быть более дружественными к памяти, чем эквивалентные представления списков». – srgerg

6
l = [(x,y) for x in range(30,50,5) for y in range(1,10,3)] 
11

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

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

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

Смежные вопросы