python:索引超出边界的数组默认值
我需要一种很好的方法来请求数组/矩阵值,但要为越界索引报告一个默认(0)值:python:索引超出边界的数组默认值,python,arrays,Python,Arrays,我需要一种很好的方法来请求数组/矩阵值,但要为越界索引报告一个默认(0)值: 如果第二个索引长度为3,则b[2][4]应返回0,并且 b[-1][2]也 我检查了这个: ,但在我看来,它不适用于负索引,因为python总是将数组长度添加到它们中(真的吗? 我一直在考虑重载\uuuu getitem\uuuu,但我一个月前才来到python,我不是那么熟练 感谢您的帮助 亚历山德罗我认为你混淆了这个问题 listy[-1]是一个相对索引,使得真正的索引等于len(listy) listy[-2]t
如果第二个索引长度为3,则b[2][4]应返回0,并且
b[-1][2]也
我检查了这个: ,但在我看来,它不适用于负索引,因为python总是将数组长度添加到它们中(真的吗?
我一直在考虑重载
\uuuu getitem\uuuu
,但我一个月前才来到python,我不是那么熟练
感谢您的帮助
亚历山德罗我认为你混淆了这个问题
listy[-1]
是一个相对索引,使得真正的索引等于len(listy)
listy[-2]
true索引是len(listy)-1。。。等等
如果相对索引不存在,它仍将引发一个
索引器
。例如:[[0]
或此[1][2]
如果需要无限大小的稀疏矩阵,可以使用defautldict:
py> matrix=defaultdict(lambda:defaultdict(lambda:0))
py> matrix[2][4]
0
py> matrix[2][4]=8
py> matrix[2][4]
8
py> matrix[-1][2]
0
因为python总是向它们添加数组长度(真?)
内置Python序列可以做到这一点,但据我所知,这是由这些序列的实现完成的,而不是由Python编译器完成的。因此,不需要,您将在
\uuuu getitem\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
(对象类内部)
如果重写list类(class newListClass(list):
),并希望在自己的getitem中使用列表的getitem,则需要编写:
class newListClass(list):
def __getitem__(self,index):
return list.__getitem__(self,index)
这样,您还可以从这个getitem捕获异常,并返回您想要的内容。
这不是你问题的答案,马丁的是。。但是您对getitem的用法很感兴趣,所以这就是实现它的方法。
享受:)+1表示稀疏的“数组”==dict。我非常喜欢使用一个带有元组的dict(而不是嵌套的)作为键,例如矩阵[2,4]
@Ben:我同意,元组在二维数组中的索引效果更好。然而,将指数分开是OP问题中的一项要求。-哦,我并没有对你的答案吹毛求疵,这似乎是提出建议的自然场所。:-)您还可以执行defaultdict(lambda:defaultdict(int))
-int()为0
@benblank-我不知道这是有效的Python语法。。。谢谢:)
class newListClass(list):
def __getitem__(self,index):
return list.__getitem__(self,index)