2013-10-04 127 views
0

我遇到了麻煩,使用我的代碼創建了一個列表。從Python中的對象創建列表

ListA = [5,1,3,8,4] 

LengthB = (len(ListA)) 


obj0 = ListA[0] 
obj1 = ListA[1] 
obj2 = ListA[2] 
obj3 = ListA[3] 
obj4 = ListA[4] 

obj01 = int(obj0) 
obj11 = int(obj1) 
obj21 = int(obj2) 
obj31 = int(obj3) 
obj41 = int(obj4) 

obj010 = obj01+obj11 
obj110 = obj01+obj11+obj21 
obj210 = obj11+obj21+obj31 
obj310 = obj21+obj31+obj41 
obj410 = obj31+obj41 

ListBnum0 = (obj010/2) 
ListBnum1 = obj110/3 
ListBnum2 = obj210/3 
ListBnum3 = obj310/ 3 
ListBnum4 = obj410/2 


print(ListBnum0) 
print(ListBnum1) 
print(ListBnum2) 
print(ListBnum3) 
print(ListBnum4) 

FinalForm1 = str(ListBnum0) 
FinalForm2 = str(ListBnum1) 
FinalForm3 = str(ListBnum2) 
FinalForm4 = str(ListBnum3) 
FinalForm5 = str(ListBnum4) 

基本上這個程序取ListA數字和計算後面的數字,數量和數目後,如果適用的一個的平均值。我真正的問題是,我怎樣才能把ListBnum(0)ListBnum(4)並創建另一個列表中的數字?

爲什麼這會在下面返回一個錯誤?

ListB = list[ListBnum0,ListBnum1,ListBnum2,ListBnum3,ListBnum4] 

回答

4

直接回答你的問題是:

new_list = [ListBnum0, ListBnum1, ListBnum2, ListBnum3, ListBnum4] 

這樣做,當你得到一個錯誤的原因:

ListB = list[ListBnum0,ListBnum1,ListBnum2,ListBnum3,ListBnum4] 

...是list是一個函數和函數調用需要括號來稱呼他們。你可以這樣寫:

ListB = list([ListBnum0,ListBnum1,ListBnum2,ListBnum3,ListBnum4]) 

但是,沒有理由這樣做。 list函數的作用是將任何迭代作爲參數,並返回具有相同值的列表。但[ListBnum0, …]已經一個列表,所以你只是無緣無故複製。


同時,這整個設計是笨重的。最好一次處理整個列表,而不是將它分成5個單獨的變量,並逐個處理它們並將它們合併回列表中。例如:

ListA = [5,1,3,8,4] 
List0 = [int(i) for i in ListA] 
def avg(x): 
    return sum(x)/len(x) 
ListB = [avg(List0[max(i-1, 0):i+2]) for i in range(len(List0))] 
ListFinal = [str(i) for i in ListB] 
+0

是的我知道這是非常草率的做,但它使我更容易得到我的結果,因爲這是我可以分解在我腦海中最好的方式。即時計劃重做清單,但如果我不能重拍程序權利,我想要一個默認值,以確保我有正確的答案。感謝你的回答! – iratemaniac

+0

另外你會如何改變設計來一次處理它? – iratemaniac

+0

@iratemaniac:查看編輯後的版本。 – abarnert