在阅读了Automatically growing lists in Python之后,我现在尝试创建一个自动增长的二维列表。 基本上我会说
>>> l = 2DGrowingList(' ') # Fills the inner lists with space (' ') character
>>> l[1][2] = 'x'
>>> print(l)
[[], [' ', ' ', 'x']]
>>> l[0][1] = 'a'
>>> print(l)
[[' ', 'a'], [' ', ' ', 'x']]
我尝试的是:
^{pr2}$现在我尝试创建一个新的2D列表,如下所示:
l = GrowingList(GrowingList(' '))
但它并没有按预期工作,因为它使用相同的实例来填充列表:
>>> l[3][0] = 'x'
>>> print(l)
[[], [], [], ['x']]
>>> l[1][0] = 'y'
>>> print(l)
[['y'], ['y'], ['y'], 'x']
此外,它不允许我立即使用l[0][2] = ...
,但我必须先调用l[0]
,然后才能访问l[0][2]
对于您的问题,最简单的解决方案可能是使用可调用的tu来构建填充值,以便在矩阵中有不同的实例。在
请注意,fill现在是可调用的,因此需要将其包装在函数中:
^{pr2}$你也不能依赖项乘法这个习惯用法,因为它只是重复值n次。为了避免这种情况,需要使用列表理解。在
但是,这种方法仍然存在一个问题:
^{3}$您可能需要考虑使用Blckknght建议的分散矩阵字典。在
可以通过将类更改为使用工厂函数而不是填充值来解决此问题。但是如果您想直接进行2D索引,而不直接在外部列表中设置任何内容,那么除了}。在
__setitem__
之外,还需要使__getitem__
扩展列表。这是因为l[x][y]
在设置其中的第y
索引之前,首先尝试获取{一个更好的方法可能是使用带有
row, column
元组的键的字典。您可以使用dict.get
来检查值并为缺少的键获取默认值。在打印:
^{pr2}$相关问题 更多 >
编程相关推荐