You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python继承list类实现rm_all方法调用时自动更新自身的问题咨询

解决方案

首先你的现有代码问题在于:rm_all方法仅生成并返回了过滤后的新列表,没有修改当前NewList实例自身存储的元素,因此原列表不会发生变化。你不需要重赋值self,直接操作可变的列表实例本身即可实现原地修改。

推荐修改方案

直接通过切片赋值替换当前实例的所有元素,代码最简单高效:

class NewList(list):
    # 原__init__里的self.__list__ = self属于冗余代码,没有实际作用可以直接删除
    def rm_all(self, qw):
        # 切片赋值直接修改自身所有元素
        self[:] = [x for x in self if x != qw]
        # 如果要对齐Python原生list方法(比如remove)的行为,不要加返回值;如果需要支持链式调用可以加return self

测试效果

执行以下代码即可看到原列表被原地修改:

l = NewList([1,2,1,3,2,1,2,1,3,1,1,2])
l.rm_all(1)
print(l)
# 输出:[2, 3, 2, 2, 3, 2]

可选低内存实现方案

如果要处理超大列表,不想生成临时的过滤列表,可以反向遍历索引删除匹配元素,避免正向遍历时删除元素导致的索引偏移问题:

def rm_all(self, qw):
    for i in reversed(range(len(self))):
        if self[i] == qw:
            del self[i]

内容的提问来源于stack exchange,提问作者user3329732

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:39:03