for 循环中的赋值

Assignments in for loops

这是我想在已经讨论过的问题之上提出的问题:

Assigning values to variables in a list using a loop

所以上面的link说不建议在for循环中执行赋值,因为这样做只会改变那些值的引用,不会改变原始变量。

例如,如果我想给每个变量加1:

p = 1
q = 2
r = 3

a = [p,q,r]

for i in a:
  i += 1 

print(p, q, r)

# returns 1 2 3

所以这不会改变 p、q 和 r,因为加一的值分配给了 'i'。我向一些人询问了这个问题的可能解决方案,有人建议我尝试使用 'enumerate' 函数。所以我做了:

p = 1
q = 2
r = 3

a = [p,q,r]

for idx, val in enumerate(a):
  a[idx] = val + 1 


print(p, q, r)

# returns 1 2 3 

所以还是不行。打印列表 'a' 确实 return 值列表加 1,但它仍然不会更改分配给 p、q 和 r 的值,这正是我想要的。

所以我目前唯一的解决办法是手动为每个变量赋值:

p = 1
q = 2
r = 3

p += 1
q += 1
r += 1 

print(p, q, r)

# returns 2 3 4

但是,在涉及的变量多于 3 个的假设设置中,例如我希望为每个分配的值加 1 的 50 个变量,手动执行将非常费力。

所以我的问题是,有没有不用手动操作的解决方案?我们如何使用 for 循环来实现这一点?或者,如果 for 循环不适用于这种情况,还有其他方法吗?

您可以维护一个字典,其中的键是字符串(您最初拥有的名称变量),值是它们被分配给的整数。

然后,您可以进行以下操作:

data = {
    "p": 1,
    "q": 2,
    "r": 3
}

for item in data:
    data[item] += 1

print(data)

这输出:

{'p': 2, 'q': 3, 'r': 4}