You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 03:33:22