Python——排序

张开发
2026/4/12 16:37:36 15 分钟阅读

分享文章

Python——排序
排序一、sorted() 函数推荐对字典列表排序工作超常用二、list.sort()三、手写快速排序四、高级用法按指定条件排序1. 按字符串长度2. 按数字绝对值3. 按对象/字典某个字段接口/测试数据常用 四者对比 常见面试题sorted()和list.sort()的区别如何对列表进行升序/降序排序如何对字典列表某个字段排序如何对元祖列表排序排序后会改变元数据吗那些会那些不会一、sorted() 函数推荐最简单、最常用一行代码搞定排序不会修改原数据最安全。用法sorted(列表)示例lst[3,1,4,2,5]new_lstsorted(lst)# 升序print(new_lst)# [1,2,3,4,5]# new_lst_reverse sorted(lst, reverseTrue) # 降序# print(new_lst_reverse) # [5,4,3,2,1]对字典列表排序工作超常用users[{name:Tom,age:20},{name:Li,age:24},{name:Jerry,age:18}]# 按 age 升序new_usersorted(users,keylambdax:x[age])print(new_user)# [{name: Jerry, age: 18}, {name: Tom, age: 20}, {name: Li, age: 24}]# 按 age 降序# new_user_reverse sorted(users, keylambda x: x[age], reverseTrue)# print(new_user_reverse) # [{name: Li, age: 24}, {name: Tom, age: 20}, {name: Jerry, age: 18}]二、list.sort()原地排序直接改原列表.用法lst.sort()示例lst[3,1,2]lst.sort()# 升序print(lst)# [1,2,3]# lst.sort(reverseTrue) # 降序# print(lst) # [3,2,1]三、手写快速排序如果你要面试必须背这个快排模板超级简洁。快速排序代码Python 最简版defquick_sort(arr):iflen(arr)1:returnarr pivotarr[0]left[xforxinarr[1:]ifxpivot]right[xforxinarr[1:]ifxpivot]returnquick_sort(left)[pivot]quick_sort(right)# 返回升序# return quick_sort(right) [pivot] quick_sort(left) # 返回降序arr[3,1,4,2,5]print(quick_sort(arr))# [1, 2, 3, 4, 5]四、高级用法按指定条件排序1. 按字符串长度words[app,banana,test]words.sort(keylen)# 升序print(words)# [app, test, banana]# words.sort(keylen, reverseTrue) # 降序# print(words) # [banana, test, app]2. 按数字绝对值lst[-3,1,-2]lst.sort(keyabs)# 按绝对值升序print(lst)# [1, -2, -3]# lst.sort(keyabs, reverseTrue) # 按绝对值降序# print(lst) # [-3, -2, 1]3. 按对象/字典某个字段接口/测试数据常用lst[{score:80},{score:70},{score:90}]lst.sort(keylambdax:x[score])# 升序print(lst)# [{score: 70}, {score: 80}, {score: 90}]# lst.sort(keylambda x: x[score], reverseTrue) # 降序# print(lst) # [{score: 90}, {score: 80}, {score: 70}] 四者对比sorted()→ 不修改原数据返回新列表最常用、最安全list.sort()→ 原地修改速度更快quick_sort()→ 面试手写专用keylambda→ 工作中处理复杂数据排序 常见面试题sorted()和list.sort()的区别sorted(列表)不修改原列表返回一个新的排好序的列表。列表.sort()原地排序直接修改原列表返回 None。工作中优先用 sorted()更安全。如何对列表进行升序/降序排序可以借助列表的sort函数中的reverse参数默认是升序true时为降序示例# 升序默认print(sorted([3,1,2]))# [1, 2, 3]# 降序print(sorted([3,1,2],reverseTrue))# [3, 2, 1]如何对字典列表某个字段排序key用来指定按什么规则如长度、字段、绝对值借助匿名函数lambda实现示例users[{name:A,age:20},{name:B,age:18},{name:C,age:22}]users.sort(keylambdax:x[age])# 升序print(users)# [{name: B, age: 18}, {name: A, age: 20}, {name: C, age: 22}]# users.sort(keylambda x: x[age], reverseTrue) # 降序# print(users) # [{name: C, age: 22}, {name: A, age: 20}, {name: B, age: 18}]如何对元祖列表排序data[(2,b),(1,a),(3,c)]# list.sort()data.sort(keylambdax:x[0])print(data)# [(1, a), (2, b), (3, c)]data.sort(keylambdax:x[0],reverseTrue)print(data)# [(3, c), (2, b), (1, a)]# python的内置函数sorted()# print(sorted(data, keylambda x: x[0])) # 升序[(1, a), (2, b), (3, c)]# print(sorted(data, keylambda x: x[0], reverseTrue)) # 降序[(3, c), (2, b), (1, a)]排序后会改变元数据吗那些会那些不会sorted() → 不会改变原数据它是Python 内置排序是 Timsort效率很高时间复杂度 O (n log n)。list.sort() → 会改变原数据工作尽量用 sorted()避免意外 bug。

更多文章