Python如何通过列表批量递增多个整数变量的值?
问题:如何通过列表同步递增原变量的值?
我定义了4个整数变量:
a = 1 b = 2 c = 3 d = 4
随后将这些变量存入列表:
my_list = [a, b, c, d]
我希望一次性递增列表中所有变量的值,尝试了以下代码:
for i in range(len(my_list)): my_list[i] += 1 print(my_list) print(a) print(b) print(c) print(d)
结果列表元素值已更新,但原变量值未改变:
[2, 3, 4, 5] 1 2 3 4
请问如何通过列表实现原变量值的递增?
解答
为什么原方法无效?
Python中整数属于不可变类型,当你把变量a/b/c/d存入列表时,列表里存储的是这些整数的值拷贝,而非变量本身的引用。修改列表元素本质是替换了列表里的拷贝值,和原变量没有关联。
可行解决方案
1. 用列表包装单个变量
利用列表的可变性,将每个整数放入子列表中,列表存储的是子列表的引用,修改子列表内的元素会同步到原变量:
a = [1] b = [2] c = [3] d = [4] my_list = [a, b, c, d] for item in my_list: item[0] += 1 print(my_list) # 输出: [[2], [3], [4], [5]] print(a[0], b[0], c[0], d[0]) # 输出: 2 3 4 5
2. 使用字典映射变量名与值
如果需要保留变量名的可读性,可以用字典存储变量名和对应值,修改字典时同步更新“变量”:
vars_dict = {'a': 1, 'b': 2, 'c': 3, 'd': 4} # 递增所有值 for key in vars_dict: vars_dict[key] += 1 print(vars_dict) # 输出: {'a': 2, 'b': 3, 'c': 4, 'd': 5} print(vars_dict['a'], vars_dict['b'], vars_dict['c'], vars_dict['d']) # 输出: 2 3 4 5
3. 自定义类封装变量
通过自定义类创建可变的实例,列表存储实例引用,修改实例属性即可同步原变量:
class IntWrapper: def __init__(self, value): self.value = value a = IntWrapper(1) b = IntWrapper(2) c = IntWrapper(3) d = IntWrapper(4) my_list = [a, b, c, d] for item in my_list: item.value += 1 print([item.value for item in my_list]) # 输出: [2, 3, 4, 5] print(a.value, b.value, c.value, d.value) # 输出: 2 3 4 5
内容的提问来源于stack exchange,提问作者ElonMusk
相关产品推荐
相关产品推荐

