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

如何按列(水平方向)对x="b"的数据进行升序排序?

解决方案:按行筛选并排序x="b"的列组

需求明确

对每一行数据执行以下操作:

  • 拆分每行的(x_n, y_n)列组(每两列为一组:x对应列和y对应列)
  • 提取所有x="b"的列组,按y值升序排序
  • 将排序后的b组放在行的前序位置,非b组保持原有顺序放在后续位置,重新组合成新行

实现示例(Python)

我们可以先将行数据拆分为(x,y)元组列表,再完成筛选、排序、合并的流程:

# 原始数据:每行按x1,y1,x2,y2,x3,y3,x4,y4的顺序存储
original_data = [
    ['b', 7, 'b', 4, 'c', 4, 'b', 1],
    ['a', 5, 'a', 9, 'b', 1, 'b', 7]
]

processed_data = []
for row in original_data:
    # 把行拆分为(x, y)元组的列表
    column_groups = [(row[i], row[i+1]) for i in range(0, len(row), 2)]
    # 筛选x="b"的组并按y升序排序
    sorted_b_groups = sorted(
        [group for group in column_groups if group[0] == 'b'],
        key=lambda item: item[1]
    )
    # 筛选非b的组,保留原始顺序
    non_b_groups = [group for group in column_groups if group[0] != 'b']
    # 合并排序后的b组和非b组,再展开为行结构
    merged_groups = sorted_b_groups + non_b_groups
    new_row = []
    for group in merged_groups:
        new_row.extend(group)
    processed_data.append(new_row)

# 输出结果
for row in processed_data:
    print(row)

代码说明

  1. 拆分列组:通过步长为2的循环,将连续的x列和y列打包成元组,简化后续分组处理
  2. 筛选排序:用列表推导式分离x="b"的组,通过sorted()函数指定按y值(元组第二个元素)升序排列
  3. 合并展开:将排序后的b组放在行首,非b组按原顺序接在后面,最后把元组展开为原始的行结构

运行后得到的结果与你期望的输出完全一致:

  • 第一行:['b', 1, 'b', 4, 'b', 7, 'c', 4]
  • 第二行:['b', 1, 'b', 7, 'a', 5, 'a', 9]

适配冒泡排序的实现

如果必须用冒泡排序完成b组的排序,可以单独对筛选出的b组执行冒泡逻辑:

def bubble_sort_b_groups(column_groups):
    # 筛选x="b"的组
    b_groups = [g for g in column_groups if g[0] == 'b']
    n = len(b_groups)
    # 冒泡排序逻辑
    for i in range(n):
        swapped = False
        for j in range(0, n - i - 1):
            if b_groups[j][1] > b_groups[j+1][1]:
                b_groups[j], b_groups[j+1] = b_groups[j+1], b_groups[j]
                swapped = True
        if not swapped:
            break
    # 合并排序后的b组和非b组
    non_b_groups = [g for g in column_groups if g[0] != 'b']
    return b_groups + non_b_groups

# 应用到每行数据
processed_data = []
for row in original_data:
    column_groups = [(row[i], row[i+1]) for i in range(0, len(row), 2)]
    merged_groups = bubble_sort_b_groups(column_groups)
    new_row = []
    for group in merged_groups:
        new_row.extend(group)
    processed_data.append(new_row)

这段代码仅对x="b"的组执行冒泡排序,最终结果与使用内置sorted()方法一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:08:09