我在列表中有自变量总数,并希望使用for循环更新值。
然而,我所尝试的并没有增加总数。
class Example:
def __init__(self):
self.total = 0
self.list = [self.total,
self.total]
for item in self.list:
item += 5
print(self.total)
Example()
示例中的打印输出为0,而我想知道我需要更改什么以使其等于10.
非常感谢
答案 0 :(得分:1)
int
,float
str
和tuple
等变量不是可变的,而是按值传递的。因此
self.list = [self.total, self.total]
相当于
self.list = [0, 0]
并且0
的数字为零,而不是self.total
的引用。所以当你这样做时:
for item in self.list:
item += 5
在每次迭代中,您将变量item
初始化为0
,然后将其增加5.因为您总是这样做,所以在循环结束时item
将始终为5 ,与迭代次数无关。并且永远不会修改self.total
。
如果您想增加self.total
,则必须明确地执行此操作:
for i in range(2):
self.total += 5
根据以下评论编辑
使用mutable时可以修改变量,例如: list
。您问题的可能解决方案可能是:
class Example:
def __init__(self):
self.total1, self.total2 = [], []
self.list = [self.total1, self.total2, self.total1]
for item in self.list:
item.append(5)
print(sum(self.total1), sum(self.total2))
如果你最后没有做什么总和,那么在for循环中你可以使用list.pop
和list.append
从item
删除现有值,更新它并重新输入 - 将其插入item
。
答案 1 :(得分:0)
试试这个: -
class Example:
def __init__(self):
self.total = 0
self.list = [self.total,
self.total]
for item in self.list:
item += 5
self.total += item
print(self.total)
Example()