Python排列函数:sort、sorted

排序函数介绍:sort()和sorted()都属于Python list的排序方法

区别:sort()属于永久性排列,直接改变该list ; sorted属于暂时性排列,会产生一个新的序列。

#sorted()
>>> print sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]

#sort()
>>> L = [5, 2, 3, 1, 4]
>>> L.sort()
>>> print L
[1, 2, 3, 4, 5]

以下对常用的sorted进行介绍:

python 内置的sorted()函数可以对一个list进行排序:

>>> sorted([8,3,8,11,-2])
[-2, 3, 8, 8, 11]

既然说是高阶函数,那么它还可以接受一个key函数来实现自定义的排序,比如按照绝对值大小进行排序:

>>> sorted([8,3,8,11,-9],key=abs)
[3, 8, 8, -9, 11]

key指定的函数将作用于list中的每一个元素上,根据key函数返回的结果进行排序。

来看看字符串排序的问题

>>> sorted(['abc','Abc','Cba','bAc'])
['Abc', 'Cba', 'abc', 'bAc']

默认的,对于字符串,sorted函数按照ASCII的大小进行排序,因为C<a,大写的C会排在小写的a前面。

如果我们想要达到忽略大小写的排序,只需要更改一下key函数:

>>> sorted(['abc','Abc','Cba','bAc'],key=str.lower)
['abc', 'Abc', 'bAc', 'Cba']

进一步,要进行反向排序,可以传入第三个参数reverse=True:

>>> sorted(['abc','Abc','Cba','bAc'],key=str.lower,reverse=True)
['Cba', 'bAc', 'abc', 'Abc']

sorted()排序的关键在于实现一个映射函数!

练习:

用一组tuple表示学生名字和成绩:L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

要求:分别按名字和成绩排序

#按名字字母排序
>>> L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
>>> def by_name(t):
    return t[0]     #t[0]表示名字

>>> L2 = sorted(L,key = by_name)
>>> print(L2)
[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

#按成绩低到高排序
>>> def by_score(t):
    return t[1]     #t[1]表示成绩

>>> L2 = sorted(L,key = by_score)
>>> print(L2)
[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]

猜你喜欢

转载自www.cnblogs.com/kumata/p/9058405.html