Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何在多个列表中更新变量(Python 3.6)_List_Python 3.x_Scope - Fatal编程技术网

List 如何在多个列表中更新变量(Python 3.6)

List 如何在多个列表中更新变量(Python 3.6),list,python-3.x,scope,List,Python 3.x,Scope,我有一个范围问题,我知道如何用Java解决这个问题,但Python给了我一些问题。假设我有如下代码: a = 1 b = 2 c = 3 list1 = [a,b,c] list2 = [b,c] b += 1 print list1 print list2 这段代码不会改变列表中的值,对于我给出的简单示例,有一个简单的解决方法,但我尝试编写的代码有10多个列表,它们都有不同的含义,使用方式也不同,但需要相互通信,并且a、b、c的值都相同。我需要能够更改变量a、b、c并更新所有列表,除了

我有一个范围问题,我知道如何用Java解决这个问题,但Python给了我一些问题。假设我有如下代码:

a = 1
b = 2
c = 3

list1 = [a,b,c]
list2 = [b,c]

b += 1

print list1
print list2

这段代码不会改变列表中的值,对于我给出的简单示例,有一个简单的解决方法,但我尝试编写的代码有10多个列表,它们都有不同的含义,使用方式也不同,但需要相互通信,并且a、b、c的值都相同。我需要能够更改变量a、b、c并更新所有列表,除了为每个列表写入更新外,还有其他方法吗?

不能通过引用存储整数,因此在一个位置增加值会导致更新所有其他值。这是因为
int
s是不可变的,因此更改其值会导致引用更改

>>> a = 5
>>> b = 1
>>> x = [a, b]
>>> id(b)
140508116572264
>>> id(x[1])
140508116572264
>>> b += 1
>>> id(b)
140508116572240
您可以看到
b
id
在增量之后发生变化,因此循环中的“b”和循环外部的“b”不一样

您可以做的是为
int
s定义一个包装器类

class MyInteger:
    def __init__(self, value):
        self.value = value
现在,使用您的
MyInteger
s构建您的列表:

a = MyInteger(1)
b = MyInteger(2)
c = MyInteger(3)

list1 = [a, b, c]
list2 = [b, c]
现在,当您增加
b
的值时,您可以看到更改反映在列表中

print([x.value for x in list1])
b.value += 1
print([x.value for x in list1])
这张照片是:

[1, 2, 3]
[1, 3, 3]

列表可能不是您想要的数据结构。好的,字典,对于这个,什么结构更好?我可以使用numpy阵列,但我认为如果没有关于您的用例的更多信息,这将无法解决我遇到的“范围”问题,很难说。太棒了!这应该是一个相对简单的解决方法。这么简单的问题,如果我改变列表的值,比如list1[1]+=1,它会在任何地方改变它吗?如果不是的话,像:for i in list1:i+=1这样的结构会起作用吗?
list1[1]。value+=1
,是的。会的
i.value+=1
也有效,因为它们引用相同的自定义对象。@DylanBarth:干杯。考虑一下你是否心情愉快。谢谢,我是新来的。在你做的那个类上,我得到了一个错误“未定义的名称‘self’”和“未定义的名称‘value’”,我通常不手工创建独立的类,这是一个可接受的错误还是我遗漏了什么?复制和粘贴而不是键入我看到的内容,它修复了它,也许“uuuuuu”是一个问题,我想我可能键入了一个而不是两个。谢谢你的帮助,错误消失了,答案被接受了,感谢时间。干杯