2015-11-12 193 views
0

我對Python完全陌生,我有一個錯誤,我不明白。我有一個名爲mult1的函數,我想要列表「a」並將每個元素相乘並輸出總數,以便[1,2,3,4]的列表輸出24.我得到一個錯誤「list索引超出範圍「在第4行Python 3列表索引超出範圍

def mult1(a): 
    n=1 
    for i in a: 
     n=n*a[i-1] 
    print(n) 

我的函數與輸入[1,2,3,4]一起使用,但不與[7,8,1,2]一起使用。爲什麼是這樣?

+4

'因爲我的了'遍歷列表中的元素,而不是他們的索引。你需要'n = n * i' –

+1

提示:在你的'for'中加入'print(i)'來查看'i'是什麼。 – GingerPlusPlus

回答

-1

for循環蟒蛇依賴於迭代協議 所以,當你寫

for i in a: 
    print(a) 

實際訪問這些索引因此沒有必要使用[i] (索引)符號,就像你在常規的c/C++/java for-loop中做的那樣。

回答你的問題

def mult1(a): 
    n = 1 
    for i in a: 
    n *= i 
    return n 
+0

爲什麼這個答案downvoted?請提供建議,以改善你是否失望 – AbtPst

+0

@ 7stud是的,你實際上訪問這些指數,如果不是,那麼請提供正確的答案 –

1

你實際上迭代了值而不是索引。因此,我指的是價值列表

def mult1(a): 
    n=1 
    for i in a: 
     n=n*i 
    print(n) 
+0

請給他添加一個行爲解釋,以便他學習,而不是僅僅發佈解決方案代碼 – Netwave

+1

謝謝,我不知道「我」將是「a」中的值。我認爲它充當索引 – Porteous96

+0

@ Porteous96:Python不是JavaScript(幸運的是)。 – GingerPlusPlus

-1

我的函數的工作與輸入[1,2,3,4],但不與[7,8,1,2]。爲什麼 是這樣的

當您讀取第一個數字7時,則將7分配給i。然後,您嘗試查找a[i-1] =>a[7-1] =>a[6]中的數字 - 並且6超出範圍。

你並不需要得到的數字的索引列表中的所有數字相乘在一起:

def mult1(nums): 
    total = 1 

    for num in nums: 
     total *= num 

    print(total) 

mult1([7,8, 1, 2]) 

--output:- 
112 
-2

我會跟你解釋所觀察到的行爲開始,通過展示一個更光潔度更好的實現你的目標的方式。

當您使用[1, 2, 3, 4]for循環計算到n=n*a[0]n=n*a[1]n=n*a[2]n=n*a[3]和工作,你必須在列表中4個元素。

然而,當你的列表是[7, 8, 1, 2]for循環的第一次迭代計算爲n=n*a[6]它拋出一個異常Index out of bounds有它試圖訪問一個4元素列表的第七元素。

有很多簡單的方法可以將列表中的所有元素相乘。其中兩個:

print (functools.reduce(lambda x,y: x*y, [7, 8, 1, 2])) 
>> 112 

#################### 

li = [7, 8, 1, 2] 
mul = 1 
for num in li: 
    mul *= num 
print (mul) 
>> 112