我对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