使用for循环(python)

时间:2019-03-03 22:49:00

标签: python python-3.x list for-loop

我目前有一些代码如下:

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岁。我该如何解决?

4 个答案:

答案 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]]