如何在python中更新变量列表?

时间:2016-12-30 15:37:30

标签: python list variables

这是我在使用python进行编程时遇到的一个加重问题。用户可以将各种变量附加到列表中,但是稍后访问时该列表仍将显示与首次分配时相同的结果。例如下面

a=1
b=2
list = [a,b] #user defined order
print list # 1,2
a=2
print list # prints 1,2

我需要列表打印出2,2。但是我无法找到一种方法来动态更新列表以适应变量的任何顺序(很多方式都是我在网上看到的硬编码,例如在需要更新时分配list = [a,b]但是我不这样做知道它是b,a还是a,b)

非常感谢帮助。谢谢

编辑:我的问题是不同的,因为关于需要在列表中动态更新的变量而不是简单地更改列表项。

4 个答案:

答案 0 :(得分:4)

您需要更新列表而不是变量:

a = 1
b = 2
lst = [a, b]  # the list now stores the references a and b point to
              # changing a later on has no effect on this!  
lst[0] = 2

请不要使用list作为变量名!这是python中的关键字内置类型,并且覆盖它是一个非常糟糕的主意!

如果你只知道列表中元素的值(并且这个值是唯一的),你可以这样做:

old_val = 2
new_val = 3

lst[lst.index(old_val)] = new_val

答案 1 :(得分:2)

如果你将不可变项存储在一个Python整数的列表中是不可能的,那么添加一个间接级别并使用可变列表:

a,b,c,d = [1],[2],[3],[4]
L = [d,b,a,c] # user-defined order
print L
a[0] = 5
print L

输出:

[[4], [2], [1], [3]]
[[4], [2], [5], [3]]

然而,这有X-Y Problem的感觉。描述使用此解决方案解决的问题可能会产生更好的解决方案。

答案 2 :(得分:1)

为什么不使用字典?

使用字典:

_dict = {}
_dict["a"] = 1
_dict["b"] = 2
print _dict["a"] # prints 1
  

现在,如果你想设置并获得变量" a":

的值
_dict["a"] = 2
print _dict["a"] # prints 2

答案 3 :(得分:-1)

在赋值'a = 1'处创建一个整数对象,其值为1.该对象将添加到列表中。在第二个赋值(a = 2)处创建 new 对象,但旧的仍然在列表中,其值保持不变。这就是你所看到的。

要更改此行为,必须更改对象的值。 Int在Python中是不可变的,这意味着正是这样,即改变值是不可能的。您必须定义自己的,然后更改其值。例如:

class MyInt(object):

    def __init__(self, value):
        self.setValue(value)

    def setValue(self, value):
        self.value = value

    def __repr__(self):
        return str(self.value)

a=MyInt(1)
print(dir(a))
b=2
list = [a,b] #user defined order
print (list) # 1,2
a.setValue(2)
print (list) # prints 2,2