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

如何对三元组列表按行列排序以生成指定矩阵结构?

解决方案

1. 按行+列排序

直接给sorted函数的key参数设置为元组(x[0], x[1]),就能实现先按行号升序排列,同一行内再按列号升序排列,完全匹配你需要的顺序:

lst = [(0, 0, 'C'), (0, 1, 'C'), (0, 2, 'C'), (0, 3, 'C'), (0, 4, 'C'), (1, 0, 'C'), (1, 4, 'C'), (1, 1, 'B'), (1, 2, 'B'), (1, 3, 'B'), (2, 0, 'C'), (2, 4, 'C'), (2, 1, 'B'), (2, 3, 'B'), (2, 2, 'A'), (3, 0, 'C'), (3, 4, 'C'), (3, 1, 'B'), (3, 2, 'B'), (3, 3, 'B'), (4, 0, 'C'), (4, 1, 'C'), (4, 2, 'C'), (4, 3, 'C'), (4, 4, 'C')]

# 按行优先、列次之排序
sorted_lst = sorted(lst, key=lambda x: (x[0], x[1]))

排序后的结果片段如下:

[(0, 0, 'C'), (0, 1, 'C'), (0, 2, 'C'), (0, 3, 'C'), (0, 4, 'C'), (1, 0, 'C'), (1, 1, 'B'), (1, 2, 'B'), (1, 3, 'B'), (1, 4, 'C'), ...]

2. 生成直观的字符矩阵

如果需要把排序后的结果转换成二维字符矩阵(方便打印查看),可以按行提取字符:

# 获取最大行号和列号(假设坐标连续)
max_row = max(x[0] for x in lst)
max_col = max(x[1] for x in lst)

# 构建矩阵
matrix = []
for row in range(max_row + 1):
    # 提取当前行的所有字符(已按列排序)
    row_chars = [char for r, c, char in sorted_lst if r == row]
    matrix.append(row_chars)

# 打印矩阵
for line in matrix:
    print(''.join(line))

运行后输出:

CCCCC
CBBBC
CBABC
CBBBC
CCCCC

3. 按行分批输出元组

如果需要按行批量展示排序后的元组,可以用itertools.groupby按行号分组:

from itertools import groupby

# 按行号分组(需确保列表已按行排序)
for row_num, group in groupby(sorted_lst, key=lambda x: x[0]):
    print(f"第{row_num}行的元组:", list(group))

输出结果片段:

第0行的元组: [(0, 0, 'C'), (0, 1, 'C'), (0, 2, 'C'), (0, 3, 'C'), (0, 4, 'C')]
第1行的元组: [(1, 0, 'C'), (1, 1, 'B'), (1, 2, 'B'), (1, 3, 'B'), (1, 4, 'C')]
...

内容的提问来源于stack exchange,提问作者JJMendoza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:17:15