2015-11-12 150 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