Python/Numpy中分组值切换器实现需求
分组切换值映射解决方案
给定输入列表:
groups = ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D']
需要生成输出列表 [0,0,0,1,1,0,0,1],要求每次分组发生变化时,输出值在0和1之间切换,且实现逻辑不依赖分组数量及每组元素个数。
方法1:遍历对比法
这是最直观的实现方式,逐个遍历元素,对比当前分组与上一个分组,不同就切换输出值:
groups = ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D'] result = [] current_val = 0 # 处理空列表的边界情况 prev_group = groups[0] if groups else None for group in groups: if group != prev_group: # 0变1,1变0 current_val = 1 - current_val prev_group = group result.append(current_val) print(result) # 输出: [0, 0, 0, 1, 1, 0, 0, 1]
这个逻辑完全不限制分组数量和每组元素数,空列表也能正常处理。
方法2:用itertools.groupby批量处理
借助itertools.groupby先把相同分组的元素聚合,再为每个分组批量添加对应值,效率更高:
from itertools import groupby groups = ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'D'] result = [] current_val = 0 # groupby会把连续相同的元素归为一组 for _, group in groupby(groups): # 获取当前分组的元素个数,批量添加值 result.extend([current_val] * len(list(group))) # 切换下一组的值 current_val = 1 - current_val print(result) # 输出: [0, 0, 0, 1, 1, 0, 0, 1]
内容的提问来源于stack exchange,提问作者Krzyztopher
相关产品推荐
相关产品推荐

