我有兴趣使用python列表对象,但功能稍有改动.特别是,我希望列表是1索引而不是0索引.例如:
>> mylist = MyList()
>> mylist.extend([1,2,3,4,5])
>> print mylist[1]
Run Code Online (Sandbox Code Playgroud)
输出应为:1
但是,当我改变了__getitem__()和__setitem__()方法,要做到这一点,我得到一个RuntimeError: maximum recursion depth exceeded错误.我对这些方法进行了很多修改,但这基本上就是我在那里所做的:
class MyList(list):
def __getitem__(self, key):
return self[key-1]
def __setitem__(self, key, item):
self[key-1] = item
Run Code Online (Sandbox Code Playgroud)
我想问题是它self[key-1]本身正在调用它定义的相同方法.如果是这样,我如何使用list()方法而不是MyList()方法?我尝试使用super[key-1]而不是self[key-1]导致投诉TypeError: 'type' object is unsubscriptable
有任何想法吗?另外,如果你能指出一个很好的教程,那就太好了!
谢谢!
我正在用 python 做一些计算,如果它们在列表中,我必须对列表中的项目求和。这是代码:
Ei=-J*S[i][j]*(S[i+1][j]+S[i-1][j]+S[i][j+1]+S[i][j-1])
Run Code Online (Sandbox Code Playgroud)
我想要的是将给出错误的元素的值设为零 list index out of range。有没有办法在不验证和的每个元素是否存在的情况下做到这一点?
提前致谢
编辑
我不希望总和为 0,只希望给出错误的元素