【问题标题】:Python2 - IndexError: creating an array of arraysPython2 - IndexError:创建数组数组
【发布时间】:2018-07-06 06:39:42
【问题描述】:

这是我的脚本的一部分:

k = int(raw_input())
order = []
o = []
for i in range(1, k):
    o.append(raw_input())
    order.append([int(n) for n in list(o[i])])

在这些输入行之后我收到以下错误:

3
241356789



 Traceback (most recent call last):
  File "[path]", line 11, in <module>
    order.append([int(n) for n in list(o[i])])
IndexError: list index out of range

但我就是不知道为什么。有人可以帮我吗? (我是初学者)

【问题讨论】:

  • 不,我没有那样做。
  • i 从 1(一)开始,您的第一个 append 将一个元素添加到索引为 0(零)的列表中,但您正在尝试索引 1。

标签: python arrays python-2.7 input raw-input


【解决方案1】:

所以,range(1, k)(在 Python 2 中)为您提供了一个列表 [1, 2, 3, ..., k-1]。 当您通过输入中的某些内容附加列表 o 时,该元素在索引 0 上可用

>> o = []
>> o.append(42)
>> o[0]
42

但是,在您的循环中,您尝试获取索引1,这是不可用的。

请记住,列表中的第一个元素可通过索引0 获得,其中第二个元素的索引为1 等等。

【讨论】:

    【解决方案2】:

    Python 有一个从 0 开始的索引。 由于您实际上是从 1 而不是 0 开始循环,因此第一次调用将超过现有列表(此时,其长度仅为 0)。

    只需将您的线路更改为

    for i in range(0,k):
    

    帮我解决了这个问题。

    【讨论】:

      【解决方案3】:

      索引 i 以 1 (range(1,k)) 开头,但索引 o 以 0 开头。您可以使用 o[-1] 访问最后一个元素。或者把for循环改成for i in range(k)

      【讨论】:

        【解决方案4】:

        for i in range(1, k): 中删除“1” for i in range(k): 这行对我来说效果很好,您可以这样做以减少循环 for i in range(k-1):

        【讨论】:

          【解决方案5】:

          简单地说:for i in range(0, k): 而不是 for i in range(1, k): 以便从第 0 个索引的开头开始。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-04-26
            • 2018-05-23
            • 1970-01-01
            • 2020-10-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-09
            相关资源
            最近更新 更多