【问题标题】:Python 3 list index out of range [duplicate]Python 3列表索引超出范围[重复]
【发布时间】:2016-02-14 07:29:59
【问题描述】:

我对 Python 完全陌生,但有一个我不明白的错误。我有一个名为 mult1 的函数,我想获取一个列表“a”并将每个元素相乘并输出总数,以便 [1,2,3,4] 的列表输出 24。我收到一个错误“列表”索引超出范围”在第 4 行

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 i in a 迭代列表的元素,而不是它们的索引。你需要n = n*i
  • 提示:将print(i) 添加到您的for 以查看i 是什么。

标签: python python-3.x for-loop


【解决方案1】:

您实际上是在迭代值而不是索引。因此 i 指的是列表中的值

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

【讨论】:

  • 请添加对行为的解释以供他学习,而不仅仅是发布解决方案代码
  • 谢谢,我不知道“i”会是“a”中的值。我认为它充当索引
  • @Porteous96:Python 不是 JavaScript(幸运的是)。
  • 感谢@DanielSanchez,我添加了一些解释。请删除反对票。
  • 为什么现在投反对票?
【解决方案2】:

python for 循环依赖于迭代协议 所以当你写

for i in a:
  print(a)

实际上正在访问这些索引,因此无需像在传统的 c/c++/java 中那样使用 [i](索引)表示法-循环。

回答你的问题

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

【讨论】:

  • 为什么这个答案被否决了?如果您投反对票,请提供改进建议
  • @7stud 是的,您实际上正在访问这些索引,如果没有,请提供正确答案
【解决方案3】:

我的函数适用于输入 [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

【讨论】:

    【解决方案4】:

    我将从解释您观察到的行为开始,最后展示实现目标的更好方法。

    当您使用 [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 元素列表的第 7 个元素。

    有许多简单的方法可以将列表中的所有元素相乘。其中两个:

    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
    

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2013-04-07
      • 2014-01-16
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 2018-03-19
      相关资源
      最近更新 更多