如何基于现有列表生成乘2列表?为何运行结果不符合预期?
问题分析与解决方案
问题根源
你的代码核心问题出在seq.index(number)方法上:
list.index(value)会返回列表中第一个匹配该值的元素的索引,而你在循环过程中直接修改了原列表的元素值,导致后续遍历到重复值时,拿到的索引并不是当前遍历的那个元素的位置。
具体执行流程
初始列表:seq = [1,2,3,4,5]
- 第一次循环:
number=1,index=0,修改后seq[0]=2→ 列表变为[2,2,3,4,5] - 第二次循环:
number=2(原第二个元素),seq.index(2)返回第一个2的索引0,修改后seq[0]=4→ 列表变为[4,2,3,4,5] - 第三次循环:
number=3,index=2,修改后seq[2]=6→ 列表变为[4,2,6,4,5] - 第四次循环:
number=4(原第四个元素),seq.index(4)返回第一个4的索引0,修改后seq[0]=8→ 列表变为[8,2,6,4,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
相关产品推荐
相关产品推荐

