【问题标题】:IndexError in Python 3 [duplicate]Python 3 中的 IndexError [重复]
【发布时间】:2019-12-15 13:56:55
【问题描述】:

当我尝试使用以下代码 sn-p 在 Python 3.7.3 中初始化一个空列表时,它会引发索引错误。谁能解释一下原因并建议一些纠正措施?

newlist = list()
x = 2
for i in range(0, 5):
    newlist[i] = x*2
print(newlist)

O/P: IndexError: list assignment index out of range

【问题讨论】:

  • 可能你想要的是newlist.append(x*2)newlist 为空,您无法访问给出错误的空列表。这类似于newlist = [],现在如果你尝试newlist[0],它会报错。
  • 但是为什么会抛出 IndexError 呢?
  • 因为您没有使用有效的索引?它必须存在才能使访问有效。

标签: python list


【解决方案1】:

这与python版本无关。新列表为空,您无法访问给出错误的空列表。 如果你一步一步看:

newlist = list()

此时查看新列表如下:

print(newlist)

将给:[]

for循环中i0开始,所以循环的第一次迭代会导致:

newlist[0] = x*2

给出IndexError,因为列表为空,您无法通过索引访问。因此,您可能需要将.append 添加到newlist,如下所示:

newlist = list()
x = 2
for i in range(0, 5):
    newlist.append(x*2) # <-- Append to newlist
print(newlist)

【讨论】:

  • “它给出了 IndexError,因为列表为空,您无法通过索引访问”:为了澄清这一点,请查看下面的代码 sn-p。此处的两个列表均已有效初始化。但是,代码在执行时返回相同的 IndexError。任何想法: vars = list(range(1,10)) squares1 = [0]*9 i = 0 while(i
  • 您是否尝试打印i 的值?在这种情况下,我从 0 变为 9,而 squares1 中有 9 个元素,即您的有效索引是 0 to 8。因此,预计索引为 9。首先通过len(squares1) 查看列表的大小,然后查看索引的范围。
【解决方案2】:

您只能访问存在索引处的元素。 所以你必须先追加元素:

newlist = list()
x = 2
for i in range(0, 5):
    newlist.append(x*2)
print(newlist)

【讨论】:

    【解决方案3】:

    您的代码试图将 x*2 的值“注入”到 4 个索引位置的列表中,但是,您的列表已经为空。

    那么,如何访问这些索引以“注入”一开始不存在的值?

    您可以使用append() 方法纠正您的代码,该方法将在每次迭代时不断将x*2 的值添加到列表末尾,从而在此过程中创建所需的索引:

    newlist = list()
    x = 2
    for i in range(0, 5):
        newlist.append(x*2)
    print(newlist)
    

    希望这可以澄清。

    【讨论】:

      【解决方案4】:

      一种蟒蛇式的方式来做你想做的事

      x=2    
      newlist = [x*2 for x in range(0,5)] 
      print(newlist)
      

      【讨论】:

        猜你喜欢
        • 2011-07-16
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-14
        • 2018-11-13
        • 2016-03-23
        • 2015-10-19
        相关资源
        最近更新 更多