在介绍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 函数将根据元组(而不是字符)来进行比较,进而判断每一个字符的前后顺序。
领取专属 10元无门槛券
私享最新 技术干货