我可以 link 两个变量,使得在 python 中一个是另一个的两倍吗?
Can I link two variables such that one is double of another in python?
所以基本上我有两个列表 a
和 b
并将它们定义为 a=b=[10]
所以改变一个会改变另一个 -
a=b=[10]
a[0]+=1
a
>>>[11]
b
>>>[11]
有没有办法做到这一点,而是让它给出双倍的变量?期望的输出 -
a=b=[10]
#some code
a
>>>[10]
b
>>>[20]
我不确定我是否正确理解了您要尝试做的事情,但像这样的事情应该可行。
prop = property(lambda self: self.a * 2)
# Dynamically creating a class with a default value for `a` and `b`
Class = type('ClassName', (object,), {"a": 0, "b": prop})
c = Class()
c.a = [10]
print(c.a, c.b) # ([10], [10, 10])
对于 a=b=[0],您实际上没有两个列表。赋值只是复制对列表的引用,而不是实际的列表,所以 liat 'a' 和 list 'b' 在赋值后都引用同一个列表。
a=b=[10]
print(a) // [10]
b = list(a)[0] * 2
a[0] += 1
print(a) // [11]
print(b) // [20]
要将 a 实际复制到 b,您有多种选择,最简单的方法是使用内置的 list() 函数进行实际复制。
谢谢。
因为 a=b=[10]
等于 b=[10];a=b
所以它们是同一件事,只有一个实例。
你可以
b=[a[0]*2]
或
b=[x*2 for x in a]
您可以创建一个继承自 list
的新 class 并创建一个 returns 修改值的 property
:
class new_list(list):
@property
def double(self):
return [i * 2 for i in self]
a = new_list([10])
a.append(20)
a.append(30)
print(a, a.double)
[10, 20, 30] [20, 40, 60]
这种方法的优点是您仍然可以直接使用 list
中的所有方法。
所以基本上我有两个列表 a
和 b
并将它们定义为 a=b=[10]
所以改变一个会改变另一个 -
a=b=[10]
a[0]+=1
a
>>>[11]
b
>>>[11]
有没有办法做到这一点,而是让它给出双倍的变量?期望的输出 -
a=b=[10]
#some code
a
>>>[10]
b
>>>[20]
我不确定我是否正确理解了您要尝试做的事情,但像这样的事情应该可行。
prop = property(lambda self: self.a * 2)
# Dynamically creating a class with a default value for `a` and `b`
Class = type('ClassName', (object,), {"a": 0, "b": prop})
c = Class()
c.a = [10]
print(c.a, c.b) # ([10], [10, 10])
对于 a=b=[0],您实际上没有两个列表。赋值只是复制对列表的引用,而不是实际的列表,所以 liat 'a' 和 list 'b' 在赋值后都引用同一个列表。
a=b=[10]
print(a) // [10]
b = list(a)[0] * 2
a[0] += 1
print(a) // [11]
print(b) // [20]
要将 a 实际复制到 b,您有多种选择,最简单的方法是使用内置的 list() 函数进行实际复制。 谢谢。
因为 a=b=[10]
等于 b=[10];a=b
所以它们是同一件事,只有一个实例。
你可以
b=[a[0]*2]
或
b=[x*2 for x in a]
您可以创建一个继承自 list
的新 class 并创建一个 returns 修改值的 property
:
class new_list(list):
@property
def double(self):
return [i * 2 for i in self]
a = new_list([10])
a.append(20)
a.append(30)
print(a, a.double)
[10, 20, 30] [20, 40, 60]
这种方法的优点是您仍然可以直接使用 list
中的所有方法。