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

不使用集合或额外列表,Python列表去重时pop索引越界问题求助

解决Python列表去重(禁止用集合)的正确实现

原代码的问题分析

你的代码存在三个核心问题:

  1. 索引越界:用range(len(l))正序遍历,pop操作会缩短列表长度,后续循环的索引会超出新列表的范围。
  2. 逻辑错误:判断的是索引i是否在子列表里,而非当前元素l[i]是否重复,完全混淆了索引和元素的概念。
  3. 索引计算错误:pop(i-2)没有合理逻辑,属于错误的索引取值。

正确实现方式

方法1:新建列表存储唯一元素(推荐,不修改原列表)

这种方式最直观,遍历原列表时只添加未出现过的元素:

l = [3,2,3,4,5,6,1,2]
unique_list = []
for num in l:
    if num not in unique_list:
        unique_list.append(num)
print(unique_list)  # 输出: [3,2,4,5,6,1]

方法2:原地修改原列表(倒序遍历)

如果必须修改原列表,要倒序遍历索引,删除后面的元素不会影响前面未遍历元素的索引:

l = [3,2,3,4,5,6,1,2]
# 从最后一个元素往前遍历
for i in range(len(l)-1, -1, -1):
    # 检查当前元素是否在它之前的子列表中(即已遍历的前面部分)
    if l[i] in l[:i]:
        l.pop(i)
print(l)  # 输出: [3,2,4,5,6,1]

倒序遍历的优势在于:删除当前索引i的元素后,前面的元素索引不会发生变化,循环到更小的索引时,不会出现索引错位或越界问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:10:25