我需要一个很好的方法来询问数组/矩阵值,但是为越界索引报告默认值(0):
如果第二个索引长度为3,则b [2] [4]应返回0,并且
b [-1] [2]也
我查了一下:
Getting a default value on index out of range in Python,但在我看来它对负指数不起作用 - 因为python总是向它们添加数组长度(是真的吗?)
我正在考虑重载__getitem__
的问题,但我刚刚在1个月前来到python,我不是那么熟练......
任何帮助表示赞赏!
的Alessandro
答案 0 :(得分:8)
如果你想要一个无限大小的稀疏矩阵,你可以使用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
答案 1 :(得分:0)
我认为你混淆了这个问题。
listy[-1]
是一个相对索引,真正的索引等于len(listy),
listy[-2]
真正的索引是len(listy)-1,......等等
如果相对索引不存在,它仍会引发IndexError
。例如:[][0]
或此[1][-2]
答案 2 :(得分:0)
因为python总是向它们添加数组长度(是吗?)
内置的Python序列执行此操作,但据我所知,这些序列的实现完成,而不是Python编译器。所以不,你会在__getitem__
(或__getslice__
)中收到负值,并可以按照自己的意愿处理。
答案 3 :(得分:0)
对于一般知识, getitem 和 setitem 的使用是这样的:
(内部对象类)
def __getitem__(self,index):
print index
return self.mylist[index]
def __setitem__(self,index,value):
self.mylist[index]=value
如果你覆盖列表类(class newListClass(list):
),并想在你自己的getitem中使用列表的getitem,你需要写:
class newListClass(list):
def __getitem__(self,index):
return list.__getitem__(self,index)
这样你也可以从 getitem 中捕获异常并返回你想要的内容。 这不是你的问题的答案,马丁是...但你对 getitem 的使用感兴趣,所以就这样做了。 享受:)