使用 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 列表中的元素执行字符串更改