如何将文件中的数值按自身值作为索引存入Python列表?
嘿,我来帮你搞定这个问题!你的代码里有几个关键的小错误,导致结果和预期不符,咱们一步步梳理并修复:
先说说你的代码哪里出问题了:
- 列表长度不够:你想把12放到索引12的位置,但你初始化的
lst = [None] * 12只有12个元素(索引0到11),根本没有索引12的位置——不过你用了append(),所以没触发报错,但结果肯定不对。 - 错误解析文件内容:你的文件里是一行用空格分隔的多个数字,但你直接把整行转成
int(line),这其实会报错(因为"1 4 6 10 12"不是一个合法整数),估计是你写代码时的小疏忽。 - 用错了添加元素的方法:
append()是把元素追加到列表末尾,而不是放到指定的索引位置,这就是为什么你的数值全跑到列表最后去了。 - 变量名混乱:你初始化了
lst,但后面却用vlist.append(),vlist根本没定义,这应该会触发NameError,肯定是笔误啦。
修复后的代码
我给你调整好了代码,你可以直接用:
# 用with语句打开文件,自动帮你关闭,更安全 with open("numbers.txt", "r", encoding="utf-8") as numfile: # 读取一行内容,去掉首尾空白,按空格拆分后转成整数列表 numbers = list(map(int, numfile.readline().strip().split())) # 计算需要的列表长度:最大数值+1,确保所有数字对应的索引都存在 max_num = max(numbers) result_list = [None] * (max_num + 1) # 把每个数字放到对应索引的位置 for num in numbers: result_list[num] = num print(result_list)
运行结果
如果你的文件内容是1 4 6 10 12,运行这段代码会输出:
[None, 1, None, None, 4, None, 6, None, None, None, 10, None, 12]
和你期望的几乎一致,要是你确实需要最后多一个None(就是你给出的[None,1,None,None,4,None,6,None,None,None,10,None,None,12]),只要把列表长度改成max_num + 2就行,也就是把result_list = [None] * (max_num + 1)改成result_list = [None] * (max_num + 2)。
内容的提问来源于stack exchange,提问作者Maxxx
相关产品推荐
相关产品推荐

