索引错误:列表赋值索引超出范围

0 投票
3 回答
947 浏览
提问于 2025-04-17 22:28

我想要做的是:

  1. 输入两个用空格分开的整数(但它们是以字符串的形式输入的)。
  2. 把它们合并成一个字符串,用 A + B 的方式。
  3. 使用 int() 把这个 A + B 转换成整数。
  4. 把这个整数值存储到一个叫 C 的列表里。

我的代码:

C = list()
for a in range(0, 4):
    A, B = input().split()
    C[a] = int(A + B)

但是它显示:

IndexError: list assignment index out of range

我不太明白这个问题。为什么 a 会超出范围(它应该是从 0 开始,到 3 结束)?

为什么会出现这个错误呢?

3 个回答

0

这里有一种更符合Python风格的写法:

c = []
for _ in range(4): # defaults to starting at 0
    c.append(sum(int(i) for i in input("Enter two space-separated numbers").split()))

或者可以用一个简洁的一行代码来实现:

c = [sum(int(i) for i in input("Enter two space-separated numbers").split()) for _ in range(4)]
0

正确的方法是像这样把元素添加到你的列表中:

C.append(int(A+B))

而且不用担心索引的问题

1

为什么会出现这个错误:

你只能引用一个已经存在的 index(索引)来访问 list(列表)。在每次循环的最后一行,你都在引用一个还没有创建的索引。例如,在第一次循环时,你试图修改索引 0,但此时列表是空的,所以这个索引并不存在。每次循环都是这样。


正确地往列表里添加一个项目的方法是这样的:

C.append(int(A + B))

或者你可以用一种非常简洁的方式来解决很多行代码的问题,这种方式叫做列表推导。这是基于你在循环中添加到 list 的事实,但这样做更简单,因为你不需要明确地去赋值:

C = [sum(int(item) for item in input("Enter two space-separated numbers: ").split()) for i in range(4)]

上面的代码可以替代你在问题中发布的所有代码。

撰写回答