在列表/数组范围之外为零

Bas*_*asj 2 python arrays numpy list scipy

使用Python列表

L=[1,2,3,4]
Run Code Online (Sandbox Code Playgroud)

我希望L[m] = 0如果m不同0,1,2,3,即:

...
L[-2]=0 
L[-1]=0  
L[0]=1
L[1]=2
L[2]=3
L[3]=4
L[4]=0
L[5]=0
Run Code Online (Sandbox Code Playgroud)

L[-2:2] = [0, 0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

这不适用于经典列表或数组.这样做的好方法是什么?

编辑:这是一个很好的解决方案(由一个答案给出):

class MyList(list):
    def __getitem__(self, index):
        return super(MyList, self).__getitem__(index) if index >= 0 and index < len(self) else 0
Run Code Online (Sandbox Code Playgroud)

但我仍然无法拥有

L[-2:2] = [0, 0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

gre*_*reg 6

你可以转换L为dict:

In [1]: L=[1,2,3,4]

In [2]: D=dict([(x, y) for x, y in enumerate(L)])

In [3]: [D.get(i, 0) for i in xrange(-3, 5)]
Out[3]: [0, 0, 0, 1, 2, 3, 4, 0]
Run Code Online (Sandbox Code Playgroud)