Python如何按规则对二维数组分三列排序实现单页日历排布
二维数组日历分组排版问题修复
原逻辑缺陷
初始代码存在三个核心问题,无法达成需求:
- 仅通过相邻元素的大小/相等关系判断分组,没有统计每个星期值的累计出现次数,无法正确区分同星期值第1、2、3次出现的元素
- 没有预留对齐空位,无法实现三行按星期列对齐的排版效果
- 漏判同星期值第三次出现的场景,col3始终为空,同时边界判断错误会遗漏符合条件的元素
正确实现代码
核心逻辑是先统计每个星期值的出现频次,按出现次数把元素放到三行对应星期的位置,空位用等长空格填充保证对齐:
from collections import defaultdict arr = [[1, 2],[1, 3],[1, 11],[2, 6],[3, 9],[3, 12],[4, 4],[4, 7],[5, 1],[5, 10],[6, 5],[7, 8]] # 按星期1-7的顺序给三行初始化空位占位 row1 = [''] * 7 row2 = [''] * 7 row3 = [''] * 7 # 记录每个星期值的出现次数 week_counter = defaultdict(int) for week, month_first_day in arr: pos = week - 1 # 星期值1-7对应列表索引0-6 week_counter[week] += 1 cell_content = f"[{week} {month_first_day}]" if week_counter[week] == 1: row1[pos] = cell_content elif week_counter[week] == 2: row2[pos] = cell_content elif week_counter[week] == 3: row3[pos] = cell_content # 格式化单行,空位置补空格保证列对齐 def format_single_line(row): line_cells = [] for cell in row: if cell: line_cells.append(cell.ljust(5)) else: line_cells.append(" " * 5) return " ".join(line_cells).rstrip() # 输出结果 print(format_single_line(row1)) print(format_single_line(row2)) print(format_single_line(row3))
运行输出
执行上述代码后将得到完全符合预期的排版结果:
[1 2] [2 6] [3 9] [4 4] [5 1] [6 5] [7 8] [1 3] [3 12] [4 7] [5 10] [1 11]
内容的提问来源于stack exchange,提问作者Tally
相关产品推荐
相关产品推荐

