python数组排序方法详解(sort, sorted,argsort)

本文详细介绍了Python中list的sort和sorted方法,以及numpy数组的argsort方法,涵盖升序、降序排序,以及索引获取等应用场景,包括一维和二维数组、字符串、字典及对象的排序方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这三个排序方法应对日常工作基本够用

先说一下三者的区别
sort, sorted 是用在 list 数据类型中的排序方法
argsort 是用在 numpy 数据类型中的排序方法( numpy 里也有一个 sort 方法,下面会讲)

sort 和 sorted 的区别如下👇
先看两个简单的升序排序,分别使用 sorted 和 sort 方法

# sorted 
num_list = [1, 8, 2, 3, 10, 4, 5]
ordered_list = sorted(num_list)
print(ordered_list)    # [1, 2, 3, 4, 5, 8, 10]
# sort
num_list = [1, 8, 2, 3, 10, 4, 5]
num_list.sort()
print(num_list)    # [1, 2, 3, 4, 5, 8, 10]

可以看出 sorted 并没有修改原来的数组,而是将排序的结果作为参数传递给一个新的数组,而 sort 则在原数组上直接进行了排序
区别就是 sorted 需要一个变量接收排序结果,sort不用
建议使用 sorted,因为 sort 虽然代码更简洁,但是会修改原数组,这样不灵活,如果你有多个地方同时使用了这个数组,那么经过 sort 操作之后的数组就已经不是原来那个数组了,debug的时候很麻烦


说完了区别,来具体讲讲使用方法

1.升序排序

# sorted 升序排序
num_list = [1, 8, 2, 3, 10, 4, 5]
ordered_list = sorted(num_list)
print(ordered_list)    # [1, 2, 3, 4, 5, 8, 10]
# sort 升序排序
num_list = [1, 8, 2, 3, 10, 4, 5]
num_list.sort()
print(num_list)    # [1, 2, 3, 4, 5, 8, 10]

2.降序排序

# sorted 降序排序
num_list = [1, 8, 2, 3, 10, 4, 5]
ordered_list = sorted(num_list, reverse=True)
print(ordered_list)    # [1, 2, 3, 4, 5, 8, 10]
# sort 降序排序
num_list = [1, 8, 2, 3, 10, 4, 5]
num_list.sort(reverse=True)
print(num_list)    # [1, 2, 3, 4, 5, 8, 10]

3.如果不想要排序后的值,想要排序后的索引,可以这样做

num_list = [1, 8, 2, 3, 10, 4, 5]
ordered_list = sorted(range(len(num_list)), key=lambda k: num_list[k])
print(ordered_list)    # [0, 2, 3, 5, 6, 1, 4]

4.字符串类型排序

# 字符串类型排序
str_list = ['1', '8', '2', '3', '10', '4', '5']
ordered_list 
### Python 冒泡排序算法实现教程 冒泡排序是一种经典的排序算法,其核心思想是通过多次遍历列表中的元素并比较相邻的两个数来完成排序操作。如果前一个元素大于后一个元素,则交换它们的位置[^1]。 以下是基于 Python 的冒泡排序算法的具体实现: #### 基本原理 冒泡排序的核心在于两层嵌套循环结构。外层控制整个排序过程的轮次,内层负责逐一比较相邻元素并对不符合条件的情况进行交换[^2]。 #### 代码实现 下面是一个标准的冒泡排序算法的 Python 实现: ```python def bubble_sort(arr): n = len(arr) # 外层循环表示需要执行多少轮比较 for i in range(n): swapped = False # 添加标志位用于优化性能 # 内层循环逐一遍历未排序部分的数组 for j in range(0, n-i-1): if arr[j] > arr[j+1]: # 如果当前项比下一项大则交换两者位置 arr[j], arr[j+1] = arr[j+1], arr[j] swapped = True # 表明发生了数据交换 if not swapped: # 若本轮无任何交换发生,则提前结束排序 break return arr ``` 此版本还引入了一个 `swapped` 变量作为优化手段,在某一轮中如果没有发生过任何交换动作,则说明剩下的部分已经是有序状态,无需再继续后续迭代。 #### 测试案例 为了验证上述函数的有效性,我们可以运行如下测试用例: ```python if __name__ == "__main__": test_array = [64, 34, 25, 12, 22, 11, 90] sorted_array = bubble_sort(test_array.copy()) print(f"原始数组:{test_array}") print(f"排序后的数组:{sorted_array}") ``` 输出结果应为: ``` 原始数组:[64, 34, 25, 12, 22, 11, 90] 排序后的数组:[11, 12, 22, 25, 34, 64, 90] ``` 以上即为完整的 Python 版冒泡排序算法及其应用实例。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么都干的派森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值