使用 for 循环更改列表中的值 (python)

新手上路,请多包涵

我目前有一些代码是这样的:

 letters = {
10 : "A",
11 : "B",
12 : "C",
13 : "D",
14 : "E",
15 : "F"
}
vallist = [rd1, rd2, gd1, gd2, bd1, bd2]
for i in vallist:
    if i >= 10:
        i = letters[i]

我想要发生的是 for 循环遍历 vallist 并将大于 10 的任何值替换为相应的字母。但是,我当前的代码只是更改了 i 而不是列表中的原始值。 For example, if rd1 is set to 15, the code runs through and i is set to "F" , but rd1 does not change到 "F" ,而是保持为 15。我该如何解决这个问题?

原文由 Kai036 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 910
2 个回答

对于 for 循环的每次迭代,变量 i 仅分配了 vallist 中的一项值的副本,因此 - 更改 i 不会反映在 i 中。

您应该通过索引更新 i 的项目,您可以使用 enumerate 函数生成:

 for index, value in enumerate(vallist):
    if value >= 10:
        vallist[index] = letters[value]

原文由 blhsing 发布,翻译遵循 CC BY-SA 4.0 许可协议

rd1, rd2, gd1, gd2, bd1, bd2 = 10, 11, 12, 13, 14, 9
letters = {
10 : "A",
11 : "B",
12 : "C",
13 : "D",
14 : "E",
15 : "F"
}
vallist = [rd1, rd2, gd1, gd2, bd1, bd2]
for index, value in enumerate(vallist):
    if value >= 10 and value <= 15:
        vallist[index] = letters[value]
print(vallist)

正如其他评论中提到的,在遍历 vallist 时您需要索引和值。因此您可以用字典中的值替换索引上的值。

原文由 Georges Lorré 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题