我在一类和嵌入式清单的工作。
class a:
def __init__(self, n):
self.l = [1] * n
def __getitem__(self, i):
return self.l[i]
def __delitem__(self, i):
print type(i)
print i
我想用del
运营商与片的完整语法:
p = a(10)
del p[1:5:2]
所述__delitem__
接收slice
对象如果参数不是一个单一的索引。 我如何使用slice
对象通过指定的元素进行迭代?
该indices
切片对象的方法,给出的序列的长度,提供了可以喂到切片的规范解释xrange
:
def __delitem__(self, item):
if isinstance(item, slice):
for i in xrange(*item.indices(len(self.l))):
print i
else:
print operator.index(item)
采用slice.indices
可以确保你在正确的情况下的行为所指出的沙丘 。 另外请注意,您可以通过切片对象list.__delitem__
,所以如果你只需要做一些预处理和委托实际删除底层列表,“天真” del self.l[i]
实际上将正常工作。
operator.index
将确保如果你早点例外__delitem__
收到一个不能被转换为索引的非切片对象。
slice
对象有start
, stop
和step
属性,你可以用它来获得上述组件。 例如:
def __delitem__(self, i):
if isinstance(i, slice):
for j in xrange(i.start, i.stop, i.step):
print j
else:
print i