Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:索引超出边界的数组默认值_Python_Arrays - Fatal编程技术网

python:索引超出边界的数组默认值

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

我需要一种很好的方法来请求数组/矩阵值,但要为越界索引报告一个默认(0)值:
如果第二个索引长度为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)