2014-09-25 27 views
1

最近我一直在玩弄列表解析,但我已經到了一個讓我感到困惑的地步。目前,我有這樣的:Double List Comprehensions

k = range(2,11) 
N = [2**k[u] for u in range(9)] 
i = [range(N[v] + 1) for v in range(9)] 

xCoord = [0.5*math.cos((2*(math.pi)*i[n][j])/N[n]) for n in range(9) for j in range(len(i[n])] 

這給了我一個普通列表,而不是一個嵌套列表,這是我想什麼。我想要一個嵌套列表,每個值爲N的列表。

只是爲了澄清,如果我的N = 4,我想生成一個包含對應於i = 0的點的x座標的列表,1,2,3,4。對於N = 8,i = 0,1,2,3,4,5,6,7,8等。

我想要做的是做一個列表沿着一個半徑爲1/2的圓的N + 1個點,然後我可以使用它來計算近似於圓的多邊形的路徑長度。

謝謝

回答

0

對於嵌套表,寫

xCoord = [[0.5*math.cos((2*(math.pi)*i[n][j])/N[n]) for j in range(len(i[n])] for n in range(9)]

注意添加[]。我也逆轉了順序,因爲j的範圍取決於n:在內部理解中,n是一個常量(由外部理解設置)。

如果您只想近似圓的圓周值,則有更有效的方法:首先,您不必存儲所有列表,只需要「當前」列表來計算長度。而且你甚至不需要列表,因爲有一個公式可以獲得長度:對於n點和半徑R,圓中刻的正多邊形的圓周很簡單(在Python語法中):2*n*R*math.sin(math.pi/n)

+0

謝謝!我現在明白了很多。我相信有更有效的方法來解決這個問題,但這是一個特別強調列表的家庭作業問題。 (我也是Python的新手!) – Bailey 2014-09-25 10:35:10

+0

...和公式是......'def perimeter_of_polygon(r,n):return n * r * math.sqrt(2-2 * math.cos(2 * math.pi/n))' – gboffi 2014-09-25 10:54:04

+0

@gboffi這是一樣的,但更長。注意1-cos(t)= 2sin(t/2)^ 2 – 2014-09-25 11:10:25

相關問題