首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

广受欢迎又风格多变的函数——sort和sorted函数

在介绍sort和sorted函数之前,先把两个函数的文档介绍(3.x版本)粘贴如下:

sort()函数

defsort(self,key=None,reverse=False):

# real signature unknown; restored from __doc__

""" L.sort(key=None, reverse=False)

-> None -- stable sort *IN PLACE* """

pass

sorted()函数

defsorted(*args,**kwargs):# real signature unknown

"""

Return a new list containing all items from the iterable in ascending order.

A custom key function can be supplied to customize the sort order, and the

reverse flag can be set to request the result in descending order.

"""

pass

简单的看一下,sort()函数需要列表对象去调用它,并且是没有返回值的,而 sorted()函数需要通过传参数,返回一个处理过的新的列表。

sort()是可变对象(字典、列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值。sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组、字符串是不具有这些方法的,如果调用将会返回一个异常。

sorted()是 python 的内置函数,并不是可变对象(列表、字典)的特有方法,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串),无论传递什么参数,都将返回一个以列表为容器的返回值,如果是字典将返回键的列表。

sort()函数用起来非常方便,但是用法也比较单一。

l = [4. 6,2,5]

print(l.sort())

[2, 4, 5, 6]

print(l.sort(reverse=True))

[6, 5, 4, 2]

sorted()函数包括 iterable(2.x版本参数名是 cmp), key, reverse参数,刚才已经用过 reverse 参数了,是一个反转效果,现在来用一下 iterable 和 key 参数对一个字典的 key 键或者 value 值进行排序,并输出排好序的元组列表。

d = {2:"r",1:"f",3:"c"}

print(sorted(d.items(),key=lambdax: x[]))

[(1, 'f'), (2, 'r'), (3, 'c')] #依据 key 键排序

print(sorted(d.items(),key=lambdax: x[1]))

[(3, 'c'), (1, 'f'), (2, 'r')] #依据 value 值排序

如果想将排好序的元组列表转化成字典,也很方便。

print(dict(sorted(d.items(),key=lambdax: x[1])))

另外,用 collections.OrderedDict,可以得到一个根据 key 键或者 value 值排序的字典。

fromcollectionsimportOrderedDict

order_d = OrderedDict(sorted(d.items(),key=lambdax:x[1]))

print(order_d)

OrderedDict([(3, 'c'), (1, 'f'), (2, 'r')])

还记得昨天的最后一题吗?

给定一个只包含大小写字母,数字的字符串,对其进行排序,要求:

所有的小写字母在大写字母前面

所有的字母在数字前面

所有的奇数在偶数前面

我们给出的答案是:

"".join(sorted(a, key=lambda x: (x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x.islower(), x)))

在 sorted()函数中,key 用来决定在排序算法中 iterable 比较的内容,key 可以是任何可被比较的内容,比如元组(python 中元组是可被比较的)。在这里,匿名函数 lambda 将输入的字符转换成一个元组,然后 sorted 函数将根据元组(而不是字符)来进行比较,进而判断每一个字符的前后顺序。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180214G0RA0200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券