Python仅用for循环、if-else实现列表/字符串去重 禁用set、空列表
原列表原地去重实现方案
约束规则
- 仅允许使用
for循环、if-else分支逻辑 - 禁止调用
set()、enumerate()、dict.fromkeys()等内置方法 - 禁止新建空列表/数组存储去重结果,必须在原列表上完成修改
- 去重逻辑:保留元素第一次出现的实例,删除后续所有重复项,剩余元素保持原有相对顺序
测试用例
给定测试列表:a = ['aa', 'bb', 'cc', 'aa', 'dd', 'ee', 'aa', 'cc', 'ff']
预期处理结果:删除索引3、索引6位置的重复元素'aa',删除索引7位置的重复元素'cc',最终列表顺序为['aa', 'bb', 'cc', 'dd', 'ee', 'ff']
实现代码
a = ['aa', 'bb', 'cc', 'aa', 'dd', 'ee', 'aa', 'cc', 'ff'] # 从列表末尾向前倒序遍历索引,避免删除元素导致后续索引错位 for i in range(len(a) - 1, -1, -1): duplicate_flag = False # 遍历当前索引之前的所有元素,检查是否存在同值元素 for j in range(i): if a[j] == a[i]: duplicate_flag = True break # 判定为重复元素则直接在原列表删除当前项 if duplicate_flag: a.pop(i) print(a)
逻辑说明
- 采用倒序遍历而非正序遍历:删除靠后的重复元素时,前面未遍历的元素索引不会发生变化,不会出现漏遍历、索引越界的问题
- 内层循环仅校验当前索引之前的元素:只要在当前位置之前出现过同值元素,就说明当前位置是重复项,直接删除即可,天然保证保留的是第一次出现的元素
- 全程仅在原列表上执行
pop()操作,没有新建额外列表存储结果,完全符合约束要求
内容的提问来源于stack exchange,提问作者Kunal
相关产品推荐
相关产品推荐

