如何在Python中对二维数组进行原地整体升序排序?
原地排序二维数组的实现方案
问题说明
给定二维数组:
arr = [['AB','KR','EH'],['EE','DD','PS'],['GH','LM','XK']]
需要实现函数对数组整体升序排序(非按行单独排序),且必须原地操作——即直接修改原数组,不能创建新的二维数组对象。现有代码仅能生成排序后的一维数组,不符合要求:
def sortArray(arr): #n : filas,columnas sorted_arr = [] for j in arr: sorted_arr.extend(j) return sorted(sorted_arr)
实现思路
要满足原地操作要求,核心是保留原二维数组的引用,仅替换其内部元素:
- 提取原数组所有元素到临时列表(用于排序过渡)
- 对临时列表执行升序排序
- 遍历原数组的每个位置,将排序后的元素依次填充回去,覆盖原有值
代码实现
def sortArray(arr): # 提取所有元素到临时列表 flat_elements = [] for row in arr: flat_elements.extend(row) # 对元素列表升序排序 flat_elements.sort() # 将排序后的元素回填到原二维数组 current_idx = 0 for i in range(len(arr)): for j in range(len(arr[i])): arr[i][j] = flat_elements[current_idx] current_idx += 1
测试验证
调用函数后原数组会被直接修改:
arr = [['AB','KR','EH'],['EE','DD','PS'],['GH','LM','XK']] sortArray(arr) print(arr) # 输出结果:[['AB', 'DD', 'EE'], ['EH', 'GH', 'KR'], ['LM', 'PS', 'XK']]
内容的提问来源于stack exchange,提问作者Eddie Esqui.
相关产品推荐
相关产品推荐

