我有以下自定义类,当它的长度大于5时,它会截断自身。当单步执行代码时,切片操作会发生,但是当控制返回给调用者时,存储的topFiveList实例保持长度> 5.我在这里做错了什么?
class topFiveList(list):
def add(self, key, value):
index = -1
for i, pair in enumerate(self):
if pair[1] < value:
index = i
break
if index == -1:
self.append([key, value])
else:
self.insert(index, [key, value])
if len(self) > 5:
self = self[:5]
testvals = [['six', 6], ['one',1], ['five',5], ['nine', 9], ['three',3], ['four', 4], ['seven', 7]]
topFive = topFiveList()
for text, value in testvals:
topFive.add(text, value)
答案 0 :(得分:3)
self = self[:5]
不修改self
实例,它只是将局部变量self
绑定到创建的切片self[:5]
。
但是,您可以使用切片分配。
self[:] = self[:5]
和
self[5:] = []
都达到了同样的效果。
第一个选项将self
的内容替换为self[:5]
。 OTOH第二个选项将从第5位开始删除所有内容。