
Python 中实现倒序降序排序Python 排序默认是升序实现倒序主要靠reverseTrue参数推荐或先排序再反转。一、列表排序sort()与sorted()方法是否修改原列表返回值list.sort(reverseTrue)✅ 原地修改Nonesorted(list, reverseTrue)❌ 不改原列表新列表pythonnums [3, 1, 4, 1, 5, 9, 2] # 1. sort() 原地降序 nums.sort(reverseTrue) print(nums) # [9, 5, 4, 3, 2, 1, 1] # 2. sorted() 返回新列表降序 nums2 [3, 1, 4, 1, 5] desc sorted(nums2, reverseTrue) print(desc) # [5, 4, 3, 1, 1] print(nums2) # [3, 1, 4, 1, 5] —— 原列表不变二、按指定字段/规则降序keyreverseTruepythonstudents [ {name: Tom, score: 88}, {name: Amy, score: 95}, {name: Bob, score: 70}, ] # 按分数降序 by_score sorted(students, keylambda s: s[score], reverseTrue) # [{name: Amy, score: 95}, {name: Tom, score: 88}, {name: Bob, score: 70}] # 按字符串长度降序 words [apple, hi, banana, ok] print(sorted(words, keylen, reverseTrue)) # [banana, apple, hi, ok]三、多条件排序混合升/降序reverse是全局的若想主要字段降序、次要字段升序常用技巧是对数值取负字符串可分段多次排序pythondata [(a, 2), (b, 2), (a, 1), (b, 3)] # 按第一个字段升序、第二个字段降序 # 技巧第二个字段取负 res sorted(data, keylambda x: (x[0], -x[1])) print(res) # [(a, 2), (a, 1), (b, 3), (b, 2)]若降序字段是字符串无法取负可用多轮稳定排序先对次要字段升序排再对主要字段降序排。四、其他常见倒序方式1.reversed()反转注意不是排序只是逆序原顺序pythonlst [1, 2, 3] print(list(reversed(lst))) # [3, 2, 1] print(lst[::-1]) # [3, 2, 1] 切片反转⚠️reversed()/切片是按原顺序反转不等于降序排序pythonprint(sorted([3, 1, 2], reverseTrue)) # [3, 2, 1] 降序 print([3, 1, 2][::-1]) # [2, 1, 3] 只是逆序2. 字典按键/值降序pythond {a: 3, b: 1, c: 2} # 按值降序 by_val sorted(d.items(), keylambda kv: kv[1], reverseTrue) # [(a, 3), (c, 2), (b, 1)] # 按键降序 by_key sorted(d.items(), keylambda kv: kv[0], reverseTrue) # [(c, 2), (b, 1), (a, 3)]3. NumPy 数组pythonimport numpy as np arr np.array([3, 1, 2]) print(np.sort(arr)[::-1]) # [3 2 1] print(-np.sort(-arr)) # [3 2 1] 取负技巧4. Pandaspythonimport pandas as pd df pd.DataFrame({x: [3, 1, 2]}) df.sort_values(x, ascendingFalse)五、常见坑sort()返回值是Nonepythonnums [3, 1, 2] nums nums.sort(reverseTrue) # ❌ nums 变成 None正确nums.sort(reverseTrue)单独调用或nums sorted(nums, reverseTrue)。reverseTrue只影响整体方向无法对多个 key 分别指定升降序见第三节。字符串排序按 Unicode 码点大小写混排时注意pythonprint(sorted([Banana, apple], reverseTrue)) # [apple, Banana]大写字母码点更小总结需求写法列表原地降序lst.sort(reverseTrue)返回新列表降序sorted(lst, reverseTrue)按字段降序sorted(data, keylambda x: x.field, reverseTrue)仅逆序非排序lst[::-1]或reversed(lst)多条件混合升降数值取负-x/ 多轮稳定排序首选reverseTrue语义清晰、效率高[::-1]只用于单纯反转顺序。github.0voice