如何编写列表推导式将列表中重复元素的重复次数减半?
解决重复元素次数减半的列表处理问题
你的需求是将原列表中每个元素的重复次数减半:第一个元素仅保留1次,其余元素原重复次数为偶数,需除以2。以下是两种可行的实现方案:
方法一:利用itertools.groupby处理连续重复元素
由于你的输入列表中相同元素是连续出现的,itertools.groupby可以直接按连续相同元素分组,统计每组长度后生成新列表:
import itertools original_list = [ [255, 255, 255], [255, 0, 0], [255, 0, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0] ] new_list = [] for key, group in itertools.groupby(original_list): group_length = len(list(group)) # 第一个元素直接保留1次 if key == original_list[0]: new_list.append(key) else: # 其余元素重复次数减半 new_list.extend([key] * (group_length // 2)) print(new_list)
输出结果:
[[255, 255, 255], [255, 0, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0]]
方法二:统计所有元素出现次数(通用非连续场景)
如果列表中相同元素不连续,可先统计每个元素的总出现次数,再按规则生成新列表:
from collections import defaultdict original_list = [ [255, 255, 255], [255, 0, 0], [255, 0, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0], [0, 255, 0] ] # 统计每个元素的出现次数(列表转元组作为字典键) count_dict = defaultdict(int) for item in original_list: count_dict[tuple(item)] += 1 new_list = [] # 记录已处理过的元素,保持原列表顺序 processed = set() for item in original_list: item_tuple = tuple(item) if item_tuple not in processed: processed.add(item_tuple) if item == original_list[0]: new_list.append(item) else: new_list.extend([item] * (count_dict[item_tuple] // 2)) print(new_list)
内容的提问来源于stack exchange,提问作者iPc
相关产品推荐
相关产品推荐

