sorted在python中是什么意思_在Python中如何使用sorted()和sort()函数

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

何时使用sorted()和.sort()

你已经看到了sorted()和.sort()之间的区别,但是什么时候该用哪一个呢?

让我来说一下,有一个5k比赛即将到来:第一届年度Python 5k。需要捕获并排序来自比赛的数据。需要捕获的数据是跑步者的号码和完成比赛所需的秒数:

d9fb4b909cf44091aca62a6b01d3b8d9.jpg

当参赛者跨过终点线时,每一个Runner都会被加入一个名为runners的列表当中。在5k比赛中,并不是所有的运动员都同时跨过起跑线,所以第一个越过终点线的人可能并不是最快的:

0f6d71a7921b4c3f8b2cdf069cda8fdc.jpg

每一次一个跑步者跨过终点线,他们的号码以及耗时(以秒为单位)都会被加入到runners列表当中。

现在,负责处理结果数据的程序员看到了这个列表,知道了前5名最快的选手是获奖者,其余的参赛者将按时间排序。

不需要根据不同的属性进行多种类型的排序。这个列表的大小是合理的。没有提到将列表存储在某个地方。只需要按时间排序,找出耗时最短的5名选手:

4993a75699d645bf862c3860ee636465.jpg

编程人员选择在参数key上使用lambda函数,以便从每一个runner中获取它们的持续时间属性,并且使用.sort()对runners列表进行排序。在runners列表完成排序之后,前5个元素被存储在top_five_runners列表中。

任务完成!比赛总监过来告诉程序员,由于Python的当前版本是3.7,所以他们决定每37名冲过终点线的人将获得一个免费的健身包。

此时,程序员开始感到很苦恼,因为runners列表已经不可逆转地更改了,没有办法恢复原始的runners列表的顺序,并找到每37人。

如果您正在处理重要的数据,即使这些原始数据需要恢复的可能性很小,那么.sort()也不是最佳选项。如果数据是副本,如果它是不重要的工作数据,如果没有人介意丢失它,因为它可以被找回,那么.sort()是一个不错的选择。

或者,runners列表可以使用sorted()函数排序,并且使用相同的lambda表达式:

21cf72775bd541c0ba9b53abde2231de.jpg

在使用sorted()函数的这个方案中,原始的runners列表仍然是完整的,没有被覆盖。通过与原始值的交互,可以实现每隔37人到达终点线的临时性要求:

2029792cb037468bb27df41bb105e27c.jpg

every_thirtyseventh_runners列表是对runners列表使用列表切片语法创建的,它仍然包含跑步者越过终点线的原始顺序。

怎样使用Python排序:结论

.sort()和sorted()可以提供所需的排序顺序,如果你正确地将它们与可选的关键字参数reverse和key一起使用的话。

当涉及到输出和修改数据时,两者具有非常不同的特性,因此请确保您仔细考虑过将使用.sort()的任何应用功能或程序,因为它会不可逆转地覆盖数据。

对于热心寻找排序方面的挑战的Python高手来说,可以尝试在排序中使用更复杂的数据类型:嵌套迭代器。英文原文:https://realpython.com/python-sort/

译者:Lyx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值