如何使用字典按索引映射替换Python列表中的数值
问题
假设我们有一个size = 10、元素全为1的向量(列表),如何编写代码实现以索引为键、待替换数值为值的字典,替换列表对应位置的元素?示例如下:
Vector = [1,1,1,1,1,1,1,1,1,1] Dict = {2:4, 6:9, 9:3} # 预期输出 [1,4,1,1,1,9,1,1,3,1]
实现方法
Python列表原生支持按索引位置直接赋值,核心逻辑就是遍历替换字典的键值对,逐个修改对应位置的元素即可。
注意示例里的字典键是日常计数习惯的1起始位置编号(比如键2对应列表里的第2个元素),和Python列表默认的0起始索引差1个偏移,实现时要对应调整:
# 初始化原始列表 vector = [1] * 10 replace_map = {2:4, 6:9, 9:3} # 遍历替换,1起始位置转Python 0基索引需要减1 for pos, new_val in replace_map.items(): vector[pos - 1] = new_val print(vector)
运行后输出和示例完全一致:
[1, 4, 1, 1, 1, 9, 1, 1, 3, 1]
如果你的字典键本身就是Python默认的0起始索引,直接去掉偏移即可:
vector = [1] * 10 replace_map = {2:4, 6:9, 9:3} for idx, new_val in replace_map.items(): vector[idx] = new_val print(vector) # 输出:[1, 1, 4, 1, 1, 1, 9, 1, 1, 3]
鲁棒性优化
如果无法保证字典里的索引都在列表的有效范围内,可以加一层范围判断,避免抛出索引越界错误:
vector = [1] * 10 replace_map = {2:4, 6:9, 9:3, 15:2} # 15超出长度10的列表的有效索引范围 for pos, new_val in replace_map.items(): idx = pos - 1 # 0基索引直接用pos即可 if 0 <= idx < len(vector): vector[idx] = new_val
内容的提问来源于stack exchange,提问作者mona
相关产品推荐
相关产品推荐

