我有几个列表,让我们说它们看起来像:
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,效果很好。虽然它不支持变异,但我可以用它来构建适合我用例的新列表。答案 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]
这个课程需要扩展和优化,但基本的想法就在那里。