【问题标题】:Is there a way for a change in a variable in a list to be reflected in the list?有没有办法让列表中变量的变化反映在列表中?
【发布时间】:2020-12-13 10:37:23
【问题描述】:

例如:

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

输出为 [0,1,2,3]。除了重新定义列表之外,还有其他方法可以获得 [0,5,2,3] 吗?另外,是否可以反向完成(即List[1] = 5,使Variable == 5)?

【问题讨论】:

标签: python list variables


【解决方案1】:

不直接。该列表不会知道重新分配,并且没有任何方法可以拦截重新分配并进行一些元编程。 (*错误除外,见注)。如果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)

*请注意原始问题中的 cmets 可以覆盖分配,但它很混乱。这个方法我比较清楚,但如果你喜欢魔法,那么https://stackoverflow.com/a/52438651/642070

【讨论】:

    【解决方案2】:

    首先,您需要了解为什么您的代码无法按预期方式运行。首先,您声明变量Variable 并将其初始化为1。然后您在列表中使用它。现在您的列表包含 0、Variable、2、3 的值,这与包含 0、1、2、3 值的列表相同。现在您更新了名为 Variable 的变量并将其更改为 5。您看,您更新了变量,但没有更新列表...该列表没有使用变量,因此它从该变量中提取了所需的数据,该变量是第一...所以就好像您甚至从未放置过变量名为Variable,就好像你只是把第一个...所以当你更新变量时,列表只是看着它,“那个包不适合我,我已经得到了我的!”。现在已经够废话了......到解决方案!首先在创建列表后,如果您知道要更新该特定值,请将其存储在一个变量中:

    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]”! 希望这有帮助!

    【讨论】:

      【解决方案3】:

      Python 变量保存值的引用。

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

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

      唯一的反映方式

      列表[1] = 变量

      【讨论】:

        猜你喜欢
        • 2012-08-18
        • 2017-12-21
        • 1970-01-01
        • 2020-01-11
        • 2016-07-27
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 2020-04-27
        相关资源
        最近更新 更多