一、了解Python中的排序函数
Python中有内置的排序函数sort(),可对数组进行排序。sort()函数默认使用升序排序。可以使用reverse参数将其改为降序排序。而对于二维数组,可以指定排序的关键字key(按照特定的列进行排序)。
# 创建一个二维数组 a = [[1, 2], [4, 1], [3, 6]] # 默认按第一个元素升序排列 a.sort() print(a) # [[1, 2], [3, 6], [4, 1]] # 按第二个元素升序排列 a.sort(key=lambda x: x[1]) print(a) # [[4, 1], [1, 2], [3, 6]] # 按第二个元素降序排列 a.sort(key=lambda x: x[1], reverse=True) print(a) # [[3, 6], [1, 2], [4, 1]]
二、多维排序
有时候我们需要按照多个元素进行排序,此时可以使用多次sort()函数或者使用sorted()函数。sorted()函数的参数与sort()函数相同,都有key和reverse参数。
# 创建一个三维数组 b = [[1, 2, 3], [2, 3, 1], [4, 1, 5]] # 按第一列升序排序,第二列升序排序 b_sorted = sorted(b, key=lambda x: (x[0], x[1])) print(b_sorted) # [[1, 2, 3], [2, 3, 1], [4, 1, 5]] # 按第一列降序排序,第二列升序排序 b_sorted = sorted(b, key=lambda x: (-x[0], x[1])) print(b_sorted) # [[4, 1, 5], [2, 3, 1], [1, 2, 3]]
三、自定义排序规则
如果需要使用自己定义的规则来排序,可以使用sort()和sorted()函数的key参数。key参数接受一个函数作为输入,该函数接受一个数组元素作为输入,返回一个用于排序的值。
# 创建一个字符串二维数组 c = [['a', 'b'], ['c'], ['d', 'e', 'f']] # 按元素数量升序排序 c_sorted = sorted(c, key=lambda x: len(x)) print(c_sorted) # [['c'], ['a', 'b'], ['d', 'e', 'f']] # 按元素数量降序排序 c_sorted = sorted(c, key=lambda x: len(x), reverse=True) print(c_sorted) # [['d', 'e', 'f'], ['a', 'b'], ['c']]
四、稳定性排序
在排序时,有时候需要保持相等元素的相对位置不变。这种排序被称为稳定性排序。在Python的sort()和sorted()函数中,默认是稳定性排序。
# 创建一个具有相等元素的二维数组 d = [[1, 'a'], [2, 'b'], [2, 'c'], [3, 'd'], [1, 'e']] # 按第一列升序排序 d_sorted = sorted(d, key=lambda x: x[0]) print(d_sorted) # [[1, 'a'], [1, 'e'], [2, 'b'], [2, 'c'], [3, 'd']] # 按第二列升序排序 d_sorted = sorted(d, key=lambda x: x[1]) print(d_sorted) # [[1, 'a'], [2, 'b'], [2, 'c'], [3, 'd'], [1, 'e']]
五、代码示例
# 创建一个具有相等元素的二维数组 d = [[1, 'a'], [2, 'b'], [2, 'c'], [3, 'd'], [1, 'e']] # 按第一列升序排序 d_sorted = sorted(d, key=lambda x: x[0]) print(d_sorted) # [[1, 'a'], [1, 'e'], [2, 'b'], [2, 'c'], [3, 'd']] # 按第二列升序排序 d_sorted = sorted(d, key=lambda x: x[1]) print(d_sorted) # [[1, 'a'], [2, 'b'], [2, 'c'], [3, 'd'], [1, 'e']]