我目前有一些代码如下:
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
,而不是列表中的原始值。例如,如果rd1
设置为15,则代码会一直运行,并且i
设置为"F"
,但是rd1
不会更改为"F"
,并且而是停留在15岁。我该如何解决?
答案 0 :(得分:3)
对于for
循环的每次迭代,变量i
都只分配了vallist
中一项的值的副本,因此赢得了对i
的更改不会反映在i
中。
您应该通过索引来更新i
的项目,可以使用enumerate
函数生成该索引:
for index, value in enumerate(vallist):
if value >= 10:
vallist[index] = letters[value]
答案 1 :(得分: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时,既需要索引也需要值。因此您可以将索引中的值替换为字典中的值。
答案 2 :(得分:0)
for i in range(len(vallist)):
if vallist[i] >= 10:
vallist[i] = letters[i]
因为在您的情况下,我只是vallist中当前项目的副本。但是这样,我将成为索引,因此您可以在其中修改原始列表。
答案 3 :(得分:0)
实际上,我是该数组元素的引用,并且该元素的值更改不会受到影响,而是尝试执行此操作
#遍历数组的每个索引
for i in range(len(vallist)):
if vallist[i] >= 10 and vallist[i]<=15:
vallist[i] = letters[vallist[i]]