如何将年度季度数组转换为年份(全季度存在时),否则保留原季度数据
解决季度数组的年份合并需求
没问题,咱们一步步来搞定这个需求——当某一年的四个季度数据全齐时,把这四个季度项替换成单一的年份值;如果季度不全,就保留原有的季度条目。
实现思路
- 拆分季度与年份:把每个输入字符串拆成季度段(比如
1Q)和年份段(比如2017),方便后续统计。 - 统计年份的季度覆盖:用字典记录每个年份对应的所有季度,再检查哪些年份包含了
1Q、2Q、3Q、4Q全部四个季度。 - 生成最终结果:遍历原数组,对于完整年份的条目,只添加一次年份值(避免重复);非完整年份的条目直接保留原内容。
Python代码实现
def merge_full_year_quarters(quarter_list): # 统计每个年份对应的季度集合 year_quarter_map = {} for item in quarter_list: # 拆分:比如'1Q2017' → 季度'1Q',年份'2017' quarter_part = item[:2] year_part = item[2:] if year_part not in year_quarter_map: year_quarter_map[year_part] = set() year_quarter_map[year_part].add(quarter_part) # 筛选出季度全齐的年份 complete_years = {year for year, quarters in year_quarter_map.items() if quarters == {'1Q', '2Q', '3Q', '4Q'}} # 生成结果数组,去重完整年份的条目 result = [] added_years = set() for item in quarter_list: current_year = item[2:] if current_year in complete_years: if current_year not in added_years: result.append(current_year) added_years.add(current_year) else: result.append(item) return result # 测试示例输入 input_array = ['1Q2017', '2Q2017', '3Q2017', '4Q2017', '1Q2018', '2Q2018', '3Q2018'] output_array = merge_full_year_quarters(input_array) print(output_array) # 输出: ['2017', '1Q2018', '2Q2018', '3Q2018']
代码说明
- 统计环节:用集合存储每个年份的季度,是因为集合的成员检查效率高,而且自动去重(避免重复统计同一个季度)。
- 去重处理:用
added_years集合记录已经添加过的完整年份,确保每个完整年份只在结果中出现一次。 - 顺序保留:遍历原数组生成结果,除了合并的年份项只保留第一个出现的那次,其他非完整年份的条目顺序和原数组一致。
如果用其他编程语言,核心思路也是一样的:先统计各年份的季度覆盖情况,再根据情况替换或保留条目。
内容的提问来源于stack exchange,提问作者SO19
相关产品推荐
相关产品推荐

