如何将一维数组转为宽度为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
相关产品推荐
相关产品推荐

