无序列表查找重复元素并同步删除双列表对应位置元素的方法
解决方案
核心思路
通过单次同步遍历两个列表完成去重,全程保留原始顺序,时间复杂度为O(n),仅需线性遍历一次即可完成:
- 用集合存储A中已出现过的元素,利用集合O(1)的查询效率保证整体性能
- 同步取A、B相同位置的元素判断,仅保留A中首次出现的元素以及对应位置的B元素
实现代码
A = [1, 2, 3, 4, 4, 5, 6, 7] B = [9, 23, 13, 52, 2, 32, 100, 1] seen = set() new_A = [] new_B = [] for a_val, b_val in zip(A, B): if a_val not in seen: seen.add(a_val) new_A.append(a_val) new_B.append(b_val) # 覆盖原变量 A, B = new_A, new_B
输出结果
A = [1, 2, 3, 4, 5, 6, 7] B = [9, 23, 13, 52, 32, 100, 1]
特殊场景适配
如果你的使用场景中两个列表长度不一致,可以改为按索引遍历避免截断,示例如下:
seen = set() new_A = [] new_B = [] # 以A的长度为基准遍历 for i in range(len(A)): current_a = A[i] current_b = B[i] if i < len(B) else None # 可自定义B长度不足时的默认值 if current_a not in seen: seen.add(current_a) new_A.append(current_a) new_B.append(current_b) A, B = new_A, new_B
内容的提问来源于stack exchange,提问作者APM500
相关产品推荐
相关产品推荐

