索引错误:列表赋值索引超出范围
我想要做的是:
- 输入两个用空格分开的整数(但它们是以字符串的形式输入的)。
- 把它们合并成一个字符串,用
A + B
的方式。 - 使用
int()
把这个A + B
转换成整数。 - 把这个整数值存储到一个叫
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)]
上面的代码可以替代你在问题中发布的所有代码。