我對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]一起使用。爲什麼是這樣?
我對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]一起使用。爲什麼是這樣?
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
爲什麼這個答案downvoted?請提供建議,以改善你是否失望 – AbtPst
@ 7stud是的,你實際上訪問這些指數,如果不是,那麼請提供正確的答案 –
你實際上迭代了值而不是索引。因此,我指的是價值列表
def mult1(a):
n=1
for i in a:
n=n*i
print(n)
請給他添加一個行爲解釋,以便他學習,而不是僅僅發佈解決方案代碼 – Netwave
謝謝,我不知道「我」將是「a」中的值。我認爲它充當索引 – Porteous96
@ Porteous96:Python不是JavaScript(幸運的是)。 – GingerPlusPlus
我的函數的工作與輸入[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
我會跟你解釋所觀察到的行爲開始,通過展示一個更光潔度更好的實現你的目標的方式。
當您使用[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
'因爲我的了'遍歷列表中的元素,而不是他們的索引。你需要'n = n * i' –
提示:在你的'for'中加入'print(i)'來查看'i'是什麼。 – GingerPlusPlus