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

Python中list的remove()方法为何仅删除首个匹配元素?

问题分析与解决

你的代码里有几个关键错误导致没能删除所有匹配的元素:

  • 循环条件使用len(sorted(lt))完全多余,sorted返回的是新列表,长度不会随原列表的元素删除而变化,等于固定了循环的判断基准,无法正确响应原列表的长度变化。
  • return lt写在了while循环内部,导致第一次循环执行后就直接返回列表,根本没机会处理后续元素。
  • 删除元素后执行i +=1会跳过下一个元素:删除lt[i]后,后面的元素会向前移位,原本的lt[i+1]变成了新的lt[i],此时i加1就会跳过这个位置的元素检查。

修复后的while循环写法

class Solution(object):
    def remove_occurances(self, lt, k):
        i = 0
        while i < len(lt):
            if lt[i] == k:
                lt.remove(lt[i])
            else:
                # 只有当前元素不等于k时,才移动索引
                i += 1
        return lt

if __name__ == "__main__":
    p = [1, 1, 3, 4, 5, 5]
    k = 1
    print(Solution().remove_occurances(p, k))  # 输出 [3,4,5,5]

更简洁的写法:列表推导式

直接生成不包含指定值的新列表,代码更简洁且可读性高:

class Solution(object):
    def remove_occurances(self, lt, k):
        return [num for num in lt if num != k]

if __name__ == "__main__":
    p = [1, 1, 3, 4, 5, 5]
    k = 1
    print(Solution().remove_occurances(p, k))

另一种写法:filter函数

用filter过滤掉等于k的元素,再转成列表:

class Solution(object):
    def remove_occurances(self, lt, k):
        return list(filter(lambda x: x != k, lt))

if __name__ == "__main__":
    p = [1, 1, 3, 4, 5, 5]
    k = 1
    print(Solution().remove_occurances(p, k))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 17:55:20