【发布时间】:2013-12-11 15:23:27
【问题描述】:
使用 Python 列表
L=[1,2,3,4]
如果m 与0,1,2,3 不同,我希望L[m] = 0,即:
...
L[-2]=0
L[-1]=0
L[0]=1
L[1]=2
L[2]=3
L[3]=4
L[4]=0
L[5]=0
和
L[-2:2] = [0, 0, 1, 2]
这不适用于经典列表或数组。这样做的好方法是什么?
编辑:这是一个不错的解决方案(由此处给出的答案给出):
class MyList(list):
def __getitem__(self, index):
return super(MyList, self).__getitem__(index) if index >= 0 and index < len(self) else 0
但我仍然无法拥有
L[-2:2] = [0, 0, 1, 2]
【问题讨论】:
-
您的意思是在列表边界之外分配(哪些负索引不一定会这样做 - 它们从末尾开始并向后工作)应该创建新条目?现有列表和新条目之间应该发生什么?为什么不直接使用带有整数键的字典?
-
那么,让我直说吧。您有列表
a和列表b。您要做的是将列表b中的所有元素更改为0,而不是列表a的成员? -
@jonrsharpe 嘿乔恩!好久不见。还记得 Edx 的我吗?如果您有时间,请来 Python 聊天室。
-
我尝试用
__getslice__实现切片,但a[-2:2]语法将(2,2)传递给__getslice__,因为它不支持否定参数,我不知道如何覆盖它。 -
我在
__getslice__上查找了文档,发现它已被弃用。相反,__getitem__应该接受切片对象。一个 slice 对象似乎有 start、stop 和 step 三个属性。
标签: python arrays list numpy scipy