2012-03-15 72 views
0

我需要在python中創建一個2D點列表(x,y)。 這將做到這一點在Python中創建一個2D點列表的更優雅的方法

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 2012-03-15 04:59:35

+0

@srgerg:出於好奇 - 爲什麼要將生成器表達式傳遞給'list()'而不是使用列表理解? – 2012-03-15 05:00:10

+0

根據我的回答中所鏈接的python文檔「生成器表達式...往往比等效的列表解析更具內存友好性」。 – srgerg 2012-03-15 05:03:41

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))) 

它擴展更好,應該比一個生成器表達式,列表理解,或顯式循環更快。

相關問題