Python入门问题:如何按指定索引将列表元素替换为随机数
解决你的Python列表替换问题
嘿,我来帮你搞定这个小问题~ 先看看你代码里的问题出在哪:
你现在的循环写的是for num in range(len(num_list)),这里的num是循环的下标值(也就是0、1、2、3),而不是num_list里存储的目标索引(2、1、1、1)。所以你实际修改的是ori[-1](对应num=0时,0-1=-1,也就是列表最后一个元素)、ori[0](num=1时)、ori[1](num=2时)、ori[2](num=3时),这完全不符合你“根据num_list里的索引替换前一个元素”的需求。
正确的代码实现
你需要直接遍历num_list里的每一个索引值,然后计算它的前一个位置来替换:
ori = [4,1,2,1,3] # 需要修改的原列表 num_list = [2,1,1,1] # 存储目标索引的列表 import random # 遍历num_list中的每个目标索引 for target_idx in num_list: # 计算要替换的位置:目标索引的前一个 replace_pos = target_idx - 1 ori[replace_pos] = random.randint(1, 4) print(ori)
代码解释
- 当
target_idx是2时,replace_pos为1,会修改ori[1]的值; - 后面三个
target_idx都是1,对应的replace_pos是0,会连续三次修改ori[0](最后一次的随机数会覆盖之前的结果); - 最终输出的结果就会和你预期的
[3,2,2,1,3]类似(因为随机数的存在,每次运行结果会有变化,但修改的位置是完全正确的)。
额外小提示
如果num_list里有可能出现0这样的索引(此时replace_pos会变成-1,会修改列表最后一个元素),你可以加个判断避免非预期的修改:
for target_idx in num_list: replace_pos = target_idx - 1 if replace_pos >= 0: # 确保替换位置在列表合法范围内 ori[replace_pos] = random.randint(1, 4)
内容的提问来源于stack exchange,提问作者mint
相关产品推荐
相关产品推荐

