在python中存储单个其他列表中元素的引用列表

时间:2016-06-06 18:29:22

标签: python

我有几个列表,让我们说它们看起来像:

a = [0, 1, 2]
b = [3, 4, 5, 6]

我希望有一个列表或类似的可迭代数据结构,它存储a和b中的所有元素:

c = [0, 1, 2, 3, 4, 5, 6]

更改任何这些元素会更改原始列表中的相应元素。

c[0] = 10
a
[10, 1, 2]

我发现的大多数资源都与做相反的事情有关 - 创建具有不同ID元素的列表副本。有一个简单的解决方案吗?

编辑 - IljaEveilä建议使用itertools.chain,效果很好。虽然它不支持变异,但我可以用它来构建适合我用例的新列表。

1 个答案:

答案 0 :(得分:3)

也许是这样的:

class IndirectList():
    def __init__(self, *args):
        self.array = list()

        for subarray in range(len(args)):
            for element in range(len(args[subarray])):
                self.array.append((args[subarray], element))

    def __len__(self):
        return len(self.array)

    def __getitem__(self, key):
        if key not in range(len(self.array)):
            raise IndexError
        return (self.array[key][0])[self.array[key][1]]

    def __setitem__(self, key, value):
        if key not in range(len(self.array)):
            raise IndexError
        (self.array[key][0])[self.array[key][1]] = value

<强> USAGE

>>> a = [0, 1, 2]
>>> b = [3, 4, 5, 6]
>>> c = IndirectList(a, b)
>>> c
<__main__.IndirectList object at 0x10187d9b0>
>>> list(c)
[0, 1, 2, 3, 4, 5, 6]
>>> c[4]
4
>>> c[4] = 13
>>> list(c)
[0, 1, 2, 3, 13, 5, 6]
>>> a
[0, 1, 2]
>>> b
[3, 13, 5, 6]
>>> a[1] = -42
>>> a
[0, -42, 2]
>>> b
[3, 13, 5, 6]
>>> list(c)
[0, -42, 2, 3, 13, 5, 6]

这个课程需要扩展和优化,但基本的想法就在那里。