这是我在使用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)
非常感谢帮助。谢谢
编辑:我的问题是不同的,因为关于需要在列表中动态更新的变量而不是简单地更改列表项。
答案 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