2010-03-11 59 views
2

我已經開始自學Python了,作爲一個練習,我已經爲自己設定了生成查找表的任務,我需要爲另一個項目。如何創建包含256個元素的列表?

我需要生成一個256個元素的列表,其中每個元素的值是math.sin(2*i*pi/256)。問題是,我不知道如何生成一個初始化爲「虛擬」值的列表,然後我可以使用for循環來分步執行並分配sin函數的值。

使用列表()似乎創建一個「空」列表,但沒有元素,所以我得到一個「列表分配索引超出範圍」錯誤的循環。除了明確創建一個包含256個元素的列表聲明,並且所有的值都是「0」以外,還有其他辦法嗎?

+1

「'math.sin(2pi/256)'」我懷疑這一點。我認爲它是'math.sin(2 * i * math.pi/256),我在範圍(256)'中。請更正您的問題。另外,請使用段落,以便我們實際解析您的問題。 – 2010-03-11 11:09:04

+0

@Bitrex:你能否接受答案來標記問題已解決? – MERose 2015-09-29 21:18:28

回答

5
my_list = [math.sin(2 * math.pi/256) for i in xrange(256)] 
+2

+1,因爲這確實產生了OP如此明確地表示他想要的內容(而不是像其他同等問題的答案那樣完全不同)。但是當[math.sin(2 * math.pi/256)] * 256'會以幾百倍的速度完成相同的工作時,做太多工作仍然是荒謬的! – 2010-03-11 04:29:33

7

兩個答案已經展示瞭如何在一個單一的行程建立您的清單,使用「列表理解」(又名「listcomp」)建設。

要回答你的具體問題,但是,

mylist = [None] * 256 

是使256個項目的列表的最簡單的方式,所有None,萬一以後要補進去。

如果您從一個空列表開始,請調用其.append(...)方法在結尾處添加每個項目。在最初爲空的列表上,除了append什麼都不做,通常會被更簡潔的listcomp取代。

當然,對於任務你真正狀態,

mylist = [math.sin(2 * math.pi/256)] * 256 

將是迄今爲止最好的方法 - 無感計算sin 256倍時,爭論總是相同的(大膽假設你是你的意思是 ;-)。

+0

亞歷克斯,這是假的Python數組傻瓜? – 2010-03-11 04:20:38

+0

@Peter,「Python for Dummies」的作者是我的一位老朋友,這本書確實很不錯。這只是一個簡單的嘗試來解釋一些關於Python列表的「生活事實」。 – 2010-03-11 04:32:15

+0

*生活的事實?!*你是說有一本關於,*喘息!*,蛇性的書嗎?也許它甚至有一個「職位清單」。 – 2010-03-11 16:30:03

1

我需要生成的256個 元素的列表,其中每個元素是math.sin的 值(2 * math.pi/256)

要字面上回答你的問題:

my_list=[math.sin(2*math.pi/256)]*256 
1

你還可以嘗試:

l = [] 
for i in range(256): 
    l.append(math.sin(2*math.pi/256)) 

這是一個迭代的for循環,不斷增加相同的值到列表的末尾256次

0

感謝您的幫助,每個人。我在這個問題發佈的規範中犯了一個錯誤,因爲列表中每個元素的值需要是每次增加的角度增加2 * pi/256的角度。在這種情況下適用於我的代碼是:

li = [math.sin((2*math.pi/256)*i) for i in xrange(0,256)] 
+0

因此,通過點擊左邊的勾號來接受適合您的答案。 – 2010-03-11 07:13:19

相關問題