优化Python列表推导式:消除嵌套数组以生成全年周数列表
优化列表推导式:避免生成中间子列表
首先,咱们拆解下你原来的思路:先通过找每周起始索引生成weeks列表,再生成每个周数重复7次的子列表后展平得到最终结果。其实完全可以跳过生成中间子列表的步骤,直接用更简洁高效的方式实现需求。
优化方案1:基于原weeks列表简化
既然你已经生成了weeks列表,我们可以直接遍历周数范围,让每个周数重复7次,不需要先创建长度为7的子数组:
weeks = [w for w in range(sum(months)) if w % 7 == 0] weeks_expanded = [week_num for week_num in range(1, len(weeks)+1) for _ in range(7)]
这里内层的for _ in range(7)只是用来控制重复次数,不需要用到循环变量_,直接把每个周数连续添加7次到结果列表中,彻底跳过了生成子列表再展平的步骤。
优化方案2:彻底省去weeks列表
更进一步,因为len(weeks)本质就是全年总天数除以7(你的months里每个元素都是7的倍数,总天数肯定是7的整数倍),所以我们连weeks列表都可以不用生成,直接一步到位:
total_days = sum(months) weeks_expanded = [week_num for week_num in range(1, total_days // 7 + 1) for _ in range(7)]
这个版本效率更高,省去了生成weeks列表的额外步骤,直接通过总天数计算出总周数,再生成每个周数重复7次的结果。
结果一致性验证
两种优化方案生成的weeks_expanded和你原代码的输出完全一致:都是从1到总周数的每个数字连续出现7次,精准对应全年每一天的周数。比如总天数为14天时,输出会是[1,1,1,1,1,1,1,2,2,2,2,2,2,2],和原逻辑的结果完全匹配。
内容的提问来源于stack exchange,提问作者hancho
相关产品推荐
相关产品推荐

