Python中如何移除列表里的第二次重复项(保留前两次出现元素)
Python实现:仅保留元素前两次出现,移除第三次及以后的重复项
先明确需求:给定原始列表 original_list = [1,2,3,4,1,2,3,1,2],我们需要保留每个元素的前两次出现,第三次及以后出现的同元素直接移除,最终得到结果 Out_list = [1,2,3,4,1,2,3]。
下面给你几个实用的实现方案:
方案一:用普通字典跟踪计数(最直观)
这个方法逻辑清晰,适合新手理解,用字典记录每个元素已经出现的次数,遍历过程中判断是否保留当前元素:
original_list = [1,2,3,4,1,2,3,1,2] count_tracker = {} out_list = [] for item in original_list: # 获取当前元素已出现的次数,默认是0,加1得到本次出现的次数 current_count = count_tracker.get(item, 0) + 1 # 只保留前两次出现的元素 if current_count <= 2: out_list.append(item) # 更新字典里的计数 count_tracker[item] = current_count print(out_list) # 输出: [1, 2, 3, 4, 1, 2, 3]
方案二:用collections.defaultdict简化代码
如果不想每次都用get()处理默认值,可以用defaultdict自动初始化计数为0,代码更简洁:
from collections import defaultdict original_list = [1,2,3,4,1,2,3,1,2] count_tracker = defaultdict(int) out_list = [] for item in original_list: count_tracker[item] += 1 if count_tracker[item] <= 2: out_list.append(item) print(out_list) # 输出: [1, 2, 3, 4, 1, 2, 3]
方案三:一行式列表推导(适合追求简洁的场景)
如果喜欢紧凑的写法,也可以用列表推导完成,不过要注意这个方法在处理大列表时效率会稍低,因为每次都要切片统计次数:
original_list = [1,2,3,4,1,2,3,1,2] out_list = [item for item in original_list if original_list[:original_list.index(item)+1].count(item) <= 2] print(out_list) # 输出: [1, 2, 3, 4, 1, 2, 3]
内容的提问来源于stack exchange,提问作者yog raj
相关产品推荐
相关产品推荐

