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

Posted

技术标签:

【中文标题】使用 for 循环(python)更改列表中的值【英文标题】:Change values in a list using a for loop (python) 【发布时间】:2019-07-25 06:06:01 【问题描述】:

我目前有一些代码如下所示:

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

【问题讨论】:

【参考方案1】:

实际上 i 是该数组元素的引用,值的变化不会影响该元素,而是试试这个,

# 遍历数组的每个索引

for i in range(len(vallist)):
 if vallist[i] >= 10 and vallist[i]<=15:
      vallist[i] = letters[vallist[i]]

【讨论】:

【参考方案2】:

对于for 循环的每次迭代,变量i 仅分配有vallist 中项目值的副本,因此对i 所做的更改不会反映在i 中.

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

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

【讨论】:

我认为这种说法是不正确的:“[...] 变量i 仅分配了vallist 中项目值的副本,[...]” .根据Ned Batchelder's guide“分配从不复制数据”。 for 循环也是一个赋值;在这种情况下,它使i 引用了一个已经被vallist 中的项目引用的值。这是i = letters[i] 行,现在i 指的是另一个值,在这种情况下是letters[i] 的值,例如字符串“A”。作者的代码示例不涉及复制。【参考方案3】:
for i in range(len(vallist)):
    if vallist[i] >= 10:
        vallist[i] = letters[i]

因为在您的情况下,i 只是 vallist 中当前项目的副本。但是这样我将成为一个索引,所以你可以通过它修改你的原始列表。

【讨论】:

【参考方案4】:
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 时需要索引和值。这样您就可以将索引上的值替换为字典中的值。

【讨论】:

以上是关于使用 for 循环(python)更改列表中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 FOR 循环中对 Python Pandas 列表中的元素执行字符串更改

求解python如何通过for循环将字符串的值放到一个列表中

Python:使用 while 或 for 循环遍历列表

根据 for 循环中的迭代次数向列表添加不同的值

Python - 尝试通过 for 循环创建字典

如何更改嵌套列表中的元素?