中sort的用法_Python必懂知识点:sort()和sorted()如何选择

都说加上ed就是过去时,如果可以,我想插上ed的翅膀,回到过去,看着那个曾经的自己,似曾相识,恍如隔日,如梦如幻,如泡如影,如露如电,如果不知道sort()和sorted()就往下看。

cca5e7099e104916e32232cbf7b3825c.png

(1)使用范围不一样

只有当对象是列表时,才能调用sort()方法,而sorted()是全局函数,可作用于所有可迭代对象

(2)返回结果不一样

因为sort()是列表的自带方法,所以当列表调用此方法时,会改变自身的值,且返回值为None。而sorted()不会改变原有对象的值,会返回一个新对象。

结合以上两点,来看具体例子:

# 列表可以调用sort()方法,并会改变自身的值,返回值为Nonea = [1, 5, 7, 3, 4]a.sort()print(a)  # [1, 3, 4, 5, 7]b = a.sort()print(b)  # None# 元组不支持sort()方法c = (1, 5, 7, 3, 4)c.sort()print(c)  # AttributeError: 'tuple' object has no attribute 'sort'# sorted()函数可以作用于元组,并不改变原有元组的值,且返回排完序后的新列表c = (1, 5, 7, 3, 4)d = sorted(c)print(c)  # (1, 5, 7, 3, 4)print(d)  # [1, 3, 4, 5, 7]

所以当我们需要保留原有的列表时,那就应该使用sorted()函数,否则就用列表自身的sort()方法,因为sort()方法不需要复制原有的列表,会消耗较少内存。

(3)key参数的使用

sort()和sorted()都有一个key参数,且用法相同,该参数是一个函数,在每个元素被比较前调用,只接受一个值并返回一个用于比较的值。

以下是调用列表的sort()方法,key作用是根据每个元素的索引为2的值进行比较。

list_data = [('老王', '北京', 36),             ('老李', '上海', 42),             ('老张', '广州', 26)]list_data.sort(key=lambda x: x[2])print(list_data)  # [('老张', '广州', 26), ('老王', '北京', 36), ('老李', '上海', 42)]

以下是使用sorted()对字典进行排序(根据value值大小)

dict_data = {'apple': 15, 'orange': 12, 'banana': 17}result = sorted(dict_data, key=lambda x: x[1])print(result)  # ['banana', 'apple', 'orange']

可以看到这并不是我们想要的结果,其原因是没有加.items(),这样只是给字典中的key值排序,即对apple、orange、banana三者排序。

又因为参数key规定根据索引为1的值进行排序,也就是比较三个单词中的第二位字母,即p、r、a。

而在比较字母时,所比较的是字母对应的Ascii值,字母顺序越靠前,其值越小。因此结果为banana、apple、orange。

要想根据value值大小对字典排序,需要加上.items()

dict_data = {'apple': 15, 'orange': 12, 'banana': 17}result = sorted(dict_data.items(), key=lambda x: x[1])print(result)  # [('orange', 12), ('apple', 15), ('banana', 17)]

加上.items()后,其实就是对('apple', 15)、(‘orange’, 12)、('banana', 17)这三个元素进行排序,然后通过参数key规定根据索引为1的值进行排序,也就是根据value值排序。

另外,不论是sort()还是sorted()都是默认升序排列,也就是reverse参数默认值为False,如果想降序排列,则需将reverse设置为True即可。


关注微信公众号“Python小镇”,发现更多干货知识!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值