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

如何基于现有列表生成乘2列表?为何运行结果不符合预期?

问题分析与解决方案

问题根源

你的代码核心问题出在seq.index(number)方法上:

  • list.index(value)会返回列表中第一个匹配该值的元素的索引,而你在循环过程中直接修改了原列表的元素值,导致后续遍历到重复值时,拿到的索引并不是当前遍历的那个元素的位置。

具体执行流程

初始列表:seq = [1,2,3,4,5]

  1. 第一次循环:number=1,index=0,修改后seq[0]=2 → 列表变为[2,2,3,4,5]
  2. 第二次循环:number=2(原第二个元素),seq.index(2)返回第一个2的索引0,修改后seq[0]=4 → 列表变为[4,2,3,4,5]
  3. 第三次循环:number=3,index=2,修改后seq[2]=6 → 列表变为[4,2,6,4,5]
  4. 第四次循环:number=4(原第四个元素),seq.index(4)返回第一个4的索引0,修改后seq[0]=8 → 列表变为[8,2,6,4,5]
  5. 第五次循环:number=5,index=4,修改后seq[4]=10 → 最终得到[8,2,6,4,10]

可行解决方案

方案1:遍历索引而非元素

直接通过索引访问并修改元素,避免值重复导致的索引错误:

seq = [1,2,3,4,5]
def times2(var):
    return var*2
for index in range(len(seq)):
    seq[index] = times2(seq[index])
print(seq)  # 输出 [2,4,6,8,10]

方案2:创建新列表存储结果

不修改原列表,而是生成一个新列表,逻辑更清晰且安全:

seq = [1,2,3,4,5]
def times2(var):
    return var*2
new_seq = []
for number in seq:
    new_seq.append(times2(number))
print(new_seq)  # 输出 [2,4,6,8,10]

内容的提问来源于stack exchange,提问作者Vish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:13