好的, 为什么这个简单的for循环无法填充列表? 这是我所拥有的:
axx = []
for i in range(1,7):
axx.append('ax'+str(i))
print(axx[i])
我遇到错误:
Traceback (most recent call last):
File "./bin_data2.py", line 57, in <module>
print(axx[i])
IndexError: list index out of range
这应该非常简单明了,不是吗? 抱歉,来自Fortran背景!
答案 0 :(得分:4)
打印时需要i-1
。从0
开始附加数组,从i
开始1
。因此,起初append
处有一个元素0
,但是i
的值为1
:
print(axx[i-1])
如果您查看以下结果:
print(list(range(1,7)))
输出:
[1, 2, 3, 4, 5, 6]
或者,您可以将范围更改为range(6)
,而不是range(1,7)
。但是,它将以0
的值打印。在这种情况下,您需要axx.append('ax'+str(i+1))
答案 1 :(得分:3)
列表从零开始索引。您的循环循环了[1, 2, 3, 4, 5, 6]
或六次。您的列表axx
将以长度为6的列表结束,索引从零到5([0, 1, 2, 3, 4. 5]
)。但是您以i
的身份访问它,它比当前索引大1。因此,您需要从中减去一个,以便在正确的位置获得该值。
所以不要使用range(1,7)
,而要使用range(6)
。
答案 2 :(得分:0)
不要忘记 python 使用从零开始的索引。您的范围 (1,7) 是从 1 到 6,但您的列表在第一个循环后的位置 0 处有一个项目,因此您的打印语句始终在 i 后面。将 range 函数更改为 range(7),或者将打印函数更改为 print(i)。
axx = []
for i in range(7):
axx.append('ax'+str(i))
print(axx[i])
输出: 轴0 轴1 轴2 斧头3 斧头4 斧头5 斧6
或
axx = []
for i in range(1,7):
axx.append('ax'+str(i))
print(i)
输出: 1 2 3 4 5 6
如果您不希望列表包含 ax0,请尝试:
axx = []
for i in range(7):
axx.append('ax'+str(i+1))
print(axx[i])
输出: 轴1 轴2 斧头3 斧头4 斧头5 斧头6 ax7
还要考虑下次在填充后打印整个列表,这样您就知道您的代码在做什么。这与您最初使用的代码相同,只是每次追加时都没有打印 i。
axx = []
for i in range(1,7):
axx.append('ax'+str(i))
print(axx)
输出: ['ax1', 'ax2', 'ax3', 'ax4', 'ax5', 'ax6']