有没有一种方法可以使列表中变量的更改反映在列表中?

3
示例:
Variable = 1
List = [0, Variable, 2, 3]
Variable = 5
print(List)

输出结果为[0, 1, 2, 3]。除了重新定义列表外,是否有其他方法可以得到[0, 5, 2, 3]?此外,是否可以反向进行(即List [1] = 5,使Variable == 5)?


1
有用的阅读材料:Ned Batchelder 的 Python Names and Values - wim
不直接。这里使用字典可以吗? - tdelaney
该列表不包含变量,而是包含在创建列表时被变量引用的相同 - chepner
这个回答解决了你的问题吗?Python列表不反映变量更改 - Pygirl
1
请参阅Python是否支持重载赋值运算符? - Håkon Hægland
3个回答

4

不能直接实现。列表不会知道重新分配的情况,也没有办法拦截重新分配并进行一些元编程(*除了错误,请参见注释)。如果Variable是容器,则可以更新其内容,并且两者都可以看到。例如,它可以是dictlist。但是使用类是一种方便的方法。在此简单示例中,所有用户都必须知道使用variable.val,但您也可以将时间投入到实现所有dunder方法以抽象化这一点。

class Variable:
    def __init__(self, val):
        self.val = val

variable = Variable(1)
my_list = [0, variable, 2, 3]
variable.val += 1
my_list[1].val += 1
print(variable.val)

*注意:根据原问题评论中的说明,赋值操作可以被重写,但这种方法比较混乱。对我来说,这种方法更清晰明了,但如果您喜欢魔术,请参考https://dev59.com/6Ggu5IYBdhLWcg3w3ana#52438651

1
首先,您需要了解为什么代码不能按照预期工作。首先,您声明了变量Variable并将其初始化为1。然后您在列表中使用它。现在您的列表包含值0、Variable、2、3,这与包含值0、1、2、3的列表相同。现在您更新了名为Variable的变量,并将其更改为5。您看,您更新了变量,但没有更新列表... 列表没有使用变量,因此它从该变量中提取了所需的数据,即数字1... 因此,就好像您从未放置过名为Variable的变量一样,就好像您只是放置了数字1... 因此,当您更新变量时,列表只是像这样查看它:“那个包裹不是给我的,我已经拿到我的了!”现在足够的废话...下面是解决方案!首先,在创建列表后,如果您知道要更新特定值,请将其存储在变量中:
Variable = 1
List = [0, Variable, 2, 3]
Variable = List[1]

现在列表看到您正在使用此值,并随之更新...因此,如果您更新它,则不是更新变量,而是更新列表中的一个值:
Variable = 1
List = [0, Variable, 2, 3]
Variable = List[1]
Variable = 5

所以,如果您让它打印列表:

print(List)

你的结果是"[0, 5, 2, 3]"!希望这有所帮助!

我看到的结果是[0, 1, 2, 3](未更新),使用的是Python 3.10。 - undefined

0

Python变量保存值的引用。

变量 = 1 列表 = [0,变量,2,3]

在您的列表中,传递变量引用而不是值本身。

唯一反映的方法

列表[1] = 变量


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接