2014-11-25 101 views
0

我有一個函數,我正在使用它將一些數字轉換爲需要迭代幾個數組的不同形式。我使用了兩個嵌套for循環,但結果不是我所期望的。我希望函數總共返回5個變量,但它會返回每個數組中相互相乘的變量數。所以在下面的例子中,它返回一個由25個變量組成的數組。通過多個陣列迭代

co_60_activities = [2 , 2 , 3 , 3 , 3] 
co_60_masses  = [2 , 2 , 3 , 3 , 3] 
def activity(activities, masses, array): 
    for x in range(len(activities)): 
     for y in range(len(masses)): 
      array.append(activities[x] * masses[y] * 37000.0) 
a_counts = [] 
activity(co_60_activities, co_60_masses, a_counts) 

我發現在類似的帖子中,迭代通過多個列表的傳統方式是使用zip函數。所以我改變了我的函數如下:

def activity(activities, masses, array): 
    for x , y in zip(activities , masses): 
     array.append(activities[x] * masses[y] * 37000.0) 

這就產生了「類型錯誤:列表索引必須是整數,而不是浮動」 我想我需要的數據類型轉換莫名其妙,但我不知道如何。

+0

請發佈給定輸入示例的預期輸出。 – wwii 2014-11-25 04:35:18

回答

4

zip會給自己的實際項目,而不是他們的索引。所以,你可以直接做

array.append(x * y * 37000.0) 

其實你不需要在這裏的功能,而不是你可以創建一個列表理解一個新的列表這樣

a_counts = [x * y * 37000.0 for x, y in zip(co_60_activities, co_60_masses)] 
+0

非常感謝!具有很大的意義,清理後的功能更易於閱讀。 – 2014-11-25 04:36:41

2

就快成功了!你得到類型錯誤的原因是你試圖通過它的值訪問列表。 zip將返回列表中元素的值。

因此你的代碼應該已經

def activity(activities, masses, array): 
    for x , y in zip(activities , masses): 
     array.append(x * y * 37000.0) 
+0

謝謝!清楚的解釋。 – 2014-11-25 04:37:40

+0

歡迎光臨!謝謝 – biobirdman 2014-11-25 04:43:49

1

事情與循環訪問列表與循環是,你沒有得到那個iterationposition指數,但實際的項目。

當你有下面的代碼

examplelist = ['a','b','c'] 

    for x in examplelist: 
     print x 

一例的輸出是

a 
b 
c 

zip()只有串接2列表中,這樣你會得到以下

examplelist1 = ['1','2','3'] 
examplelist2 = ['a','b','c'] 

for x,y in zip(examplelist1,examplelist2): 
    print x, y 

輸出:

1 a 
2 b 
3 c