从列表中增加自变量

时间:2018-01-29 10:03:55

标签: python python-3.x for-loop

我在列表中有自变量总数,并希望使用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.

非常感谢

2 个答案:

答案 0 :(得分:1)

intfloat strtuple等变量不是可变的,而是按值传递的。因此

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.poplist.appenditem删除现有值,更新它并重新输入 - 将其插入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()