Python使用range类型遍历列表偶数索引替换元素问题排查
问题说明
使用Pythonrange类型处理列表时出现逻辑偏差,代码第二部分的预期需求如下:
- 定位列表所有偶数索引位置(索引从0开始计数)
- 计算规则:索引值 × 对应位置存储字符串的长度
- 用计算结果替换偶数索引位置的原有元素,奇数索引位置元素保持不变
- 预期运行效果参考:
original list: ['computer', 'science', 'university', 'alberta', 'edmonton']
modified list: [0, 'science', 20, 'alberta', 32]
当前存在问题的实现代码:
lista = [] word = input('Enter a word >') while word != 'stop': lista.append(word) word = input('Enter a word >') print(lista) for index in range(0, len(lista), 2): lista[index] = index index *= len(str(word)) print(lista)
错误点排查
原有代码共有4处核心逻辑问题:
- 赋值顺序颠倒:先把列表对应位置直接赋值为裸索引值,再做乘法计算,完全跳过了「乘以对应位置字符串长度」的要求
- 取值对象错误:计算长度时调用的是输入循环结束后最后一次存储的
word变量(也就是终止输入的'stop'),不是当前遍历到的偶数索引位置存储的列表元素 - 无效操作:
for循环的迭代变量index是临时值,直接修改index本身不会回写到列表里,属于无意义操作 - 冗余输出:循环内每次迭代都打印全列表,不符合最终输出原始列表、修改后列表的需求
正确实现方案
lista = [] word = input('Enter a word >') while word != 'stop': lista.append(word) word = input('Enter a word >') print(f'original list: {lista}') # 步长设为2遍历所有偶数索引 for index in range(0, len(lista), 2): # 直接取当前索引位置的字符串算长度,计算完成后回写到对应位置 lista[index] = index * len(lista[index]) print(f'modified list: {lista}')
用参考样例验证计算逻辑:
- 索引0:
0 * len('computer') = 0*8 = 0 - 索引2:
2 * len('university') = 2*10 = 20 - 索引4:
4 * len('edmonton') = 4*8 =32
计算结果和预期输出完全匹配。
内容的提问来源于stack exchange,提问作者dw2n2wd
相关产品推荐
相关产品推荐

