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

如何将一维数组转为宽度为4、按第三元素排序的二维数组

一维数组转排序后二维数组实现方案

核心逻辑

  • 第一步:将输入一维数组按固定宽度4切片,生成分块二维数组;若数组长度不是4的整数倍,可根据需求选择截断末尾不足4个的部分,或补占位值后分组
  • 第二步:以二维数组每行的第3个元素(从0开始计数索引为2)为排序键,执行升序排序

代码实现

Python 原生实现

适配中小规模数据,写法简单无依赖:

# 输入示例数组
raw_arr = [1,5,8,9,9,1,4,6,7,8,41,4,5,31,6,11]
chunk_width = 4
# 第一步:生成分块二维数组
two_d_array = [raw_arr[i:i+chunk_width] for i in range(0, len(raw_arr), chunk_width)]
# 第二步:按每行第三个元素升序排序
sorted_two_d_array = sorted(two_d_array, key=lambda row: row[2])
# 输出结果验证
print(sorted_two_d_array)

输出结果与示例完全一致:

[[9, 1, 4, 6], [5, 31, 6, 11], [1, 5, 8, 9], [7, 8, 41, 4]]

超大规模数组优化实现

如果待处理数组远大于内存容量,可使用生成器流式读取分块,减少内存占用:

def chunk_large_array(input_iterator, chunk_width=4):
    current_chunk = []
    for item in input_iterator:
        current_chunk.append(item)
        if len(current_chunk) == chunk_width:
            yield current_chunk
            current_chunk = []
    # 若需要保留不足4个元素的末尾块,可放开下方注释
    # if current_chunk:
    #     yield current_chunk + [0]*(chunk_width - len(current_chunk))
# 使用示例:可对接文件流、数据库迭代器等输入源
# all_chunks = list(chunk_large_array(your_large_input_stream))
# sorted_chunks = sorted(all_chunks, key=lambda x:x[2])

Numpy 高性能实现

处理百万级以上元素的数组时,向量化运算性能远高于原生Python:

import numpy as np
raw_arr = np.array([1,5,8,9,9,1,4,6,7,8,41,4,5,31,6,11])
# 第一步:重塑为4列的二维数组
two_d_array = raw_arr.reshape(-1, 4)
# 第二步:按第3列升序排序
sorted_two_d_array = two_d_array[two_d_array[:, 2].argsort()]
# 输出验证
print(sorted_two_d_array)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:36:03