字典的方法.viewvalues()
和.viewkeys()
允许创建列表变量,这些变量将在每次字典修改时链接和动态更新,例如:
diction={'one':1,'two':2,'three':3}
dict_values=dictVar.viewvalues()
dict_keys=dictVar.viewkeys()
我想知道列表是否可以实现类似的功能。所以,如果有两个"来源"列表变量和第三个列表是两个总和的结果:
a=[1,2,3]
b=[4,5,6]
sum=a+b
现在我想要的是一个列表变量sum
,如果/当列表变量a
或列表变量b
被修改时更新。如何实现?
答案 0 :(得分:1)
你可以反过来使用numpy
数组。
>>> import numpy as np
>>> ab = np.array([1,2,3,4,5,6])
>>> a = ab[:3]
>>> b = ab[3:]
>>> a, b
(array([1, 2, 3]), array([4, 5, 6]))
>>> a[1] = 9
>>> ab
array([1, 9, 3, 4, 5, 6])
>>> ab[0] = 7
>>> a
array([7, 9, 3])
此处,a
和b
是数组ab
上的“视图”,修改其中一个也会修改另一个。
从a
和b
开始,只需从a+b
创建一个numpy数组,然后相应地重新定义a
和b
:
>>> a, b = [1,2,3], [4,5,6]
>>> ab = np.array(a+b)
>>> a, b = ab[:3], ab[3:]
答案 1 :(得分:1)
我定义了一个函数来执行它,然后在需要列表时调用它。
a=[1,2,3]
b=[4,5,6]
def sum(a, b):
return a + b
然后,在翻译中:
>>> sum(a, b)
[1, 2, 3, 4, 5, 6]
>>> a.append(5)
>>> sum(a, b)
[1, 2, 3, 5, 4, 5, 6]
如果不需要它是一个单一的列表,你可以轻松地做你想要的。
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> sum = [a, b]
>>> print(sum)
[[1, 2, 3], [4, 5, 6]]
>>> a.append(8)
>>> print(sum)
[[1, 2, 3, 8], [4, 5, 6]]
尽管如此,我建议不要定义名为sum
的变量,因为它是built-in Python function。
答案 2 :(得分:0)
您必须修改自定义数据结构才能执行此操作。这是正确的方向......
class LinkedArrays(object):
def __init__(self, sourceArray1, sourceArray2, combineFunction):
self.sa1, self.sa2 = sourceArray1, sourceArray2
self.__combineFunction = combineFunction
self.__update()
def updateSourceArray1(self, index, value):
self.sa1[index] = value
self.__update()
def updateSourceArray2(self, index, value):
self.sa2[index] = value
self.__update()
def __update(self):
self.combinedArray = [self.__combineFunction(self.sa1[i], self.sa2[i]) for i in range(len(self.sa1))]
def __getitem__(self, item):
return self.combinedArray[item]
summedArrays = LinkedArrays([1, 2, 3], [4, 5, 6], lambda x, y: x+y)
print summedArrays[0] # print 5
summedArrays.updateSourceArray1(0, 6)
print summedArrays[0] # print 10