You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将文件中的数值按自身值作为索引存入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:58:40