鱼C论坛

 找回密码
 立即注册
查看: 1954|回复: 5

[已解决]关于sort()方法和sorted()方法

[复制链接]
发表于 2023-4-21 11:29:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> list1 = [1, 18, 13, 0, -98, 34, 54, 76, 32]
>>> list2 = list1[:]
>>> list2
[1, 18, 13, 0, -98, 34, 54, 76, 32]

>>> list1.sort() # 无返回值
>>> list1
[-98, 0, 1, 13, 18, 32, 34, 54, 76] # 按排序后显示

>>> sorted(list2) # 有返回值
[-98, 0, 1, 13, 18, 32, 34, 54, 76] # 返回排序后的列表
>>> list2
[1, 18, 13, 0, -98, 34, 54, 76, 32] # 仍是原来的排列顺序


小甲鱼教材上说:

1、列表的内建方法sort()是实现列表原地排序 --- 我没看懂和理解,请大神结合上面的例子说明

2、而sorted()是返回一个排序后的新列表 --- 是指sorted(list2) 的返回值吗?但 list2返回的结果还是原来的列表顺序

最佳答案
2023-4-21 11:38:41
1. 列表的内建方法 `sort()` 是实现列表原地排序。原地排序意味着不会创建一个新的列表,而是在原有列表上直接进行排序。也就是说,调用 `sort()` 方法后,原列表将被修改为排序后的列表。在您给出的例子中,`list1.sort()` 就是在 `list1` 上进行原地排序,排序后的 `list1` 变为 `[-98, 0, 1, 13, 18, 32, 34, 54, 76]`。原来的 `list1` 已经被改变。

2. 而 `sorted()` 是返回一个排序后的新列表。`sorted()` 函数会创建一个新的列表,包含原列表中的所有元素,并按顺序排列。在您给出的例子中,`sorted(list2)` 的返回值是一个新的排序后的列表 `[-98, 0, 1, 13, 18, 32, 34, 54, 76]`。这里需要注意的是,`sorted()` 函数不会改变原列表。在例子中,`list2` 的值仍然是 `[1, 18, 13, 0, -98, 34, 54, 76, 32]`,即使我们已经对它使用了 `sorted()` 函数。

总结一下:
- `sort()` 方法直接在原列表上进行排序,不会创建新的列表,原列表会被修改为排序后的列表。
- `sorted()` 函数返回一个排序后的新列表,原列表不会被修改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-21 11:38:41 | 显示全部楼层    本楼为最佳答案   
1. 列表的内建方法 `sort()` 是实现列表原地排序。原地排序意味着不会创建一个新的列表,而是在原有列表上直接进行排序。也就是说,调用 `sort()` 方法后,原列表将被修改为排序后的列表。在您给出的例子中,`list1.sort()` 就是在 `list1` 上进行原地排序,排序后的 `list1` 变为 `[-98, 0, 1, 13, 18, 32, 34, 54, 76]`。原来的 `list1` 已经被改变。

2. 而 `sorted()` 是返回一个排序后的新列表。`sorted()` 函数会创建一个新的列表,包含原列表中的所有元素,并按顺序排列。在您给出的例子中,`sorted(list2)` 的返回值是一个新的排序后的列表 `[-98, 0, 1, 13, 18, 32, 34, 54, 76]`。这里需要注意的是,`sorted()` 函数不会改变原列表。在例子中,`list2` 的值仍然是 `[1, 18, 13, 0, -98, 34, 54, 76, 32]`,即使我们已经对它使用了 `sorted()` 函数。

总结一下:
- `sort()` 方法直接在原列表上进行排序,不会创建新的列表,原列表会被修改为排序后的列表。
- `sorted()` 函数返回一个排序后的新列表,原列表不会被修改。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-21 13:18:13 | 显示全部楼层
isdkz 发表于 2023-4-21 11:38
1. 列表的内建方法 `sort()` 是实现列表原地排序。原地排序意味着不会创建一个新的列表,而是在原有列表上 ...

[1, 2, 3] = [3, 1, 2]吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-21 13:26:55 | 显示全部楼层
lzb1001 发表于 2023-4-21 13:18
[1, 2, 3] = [3, 1, 2]吧

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-22 08:25:04 | 显示全部楼层

看似差不多的两个列表,但实际却不相等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 08:55:42 | 显示全部楼层
lzb1001 发表于 2023-4-22 08:25
看似差不多的两个列表,但实际却不相等

列表是有顺序的,顺序不一样肯定不相等呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 18:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表