如何在列表变量之间创建动态链接

时间:2014-08-14 18:14:35

标签: python

字典的方法.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被修改时更新。如何实现?

3 个答案:

答案 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])

此处,ab是数组ab上的“视图”,修改其中一个也会修改另一个。

ab开始,只需从a+b创建一个numpy数组,然后相应地重新定义ab

>>> 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