Python sorted() 函数

来源:互联网 发布:mac充电指示灯不亮了 编辑:程序博客网 时间:2024/05/28 17:04

廖雪峰Python教程 sorted部分笔记

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。

Python内置的sorted()函数就可以对list进行排序:

>>> sorted([36, 5, -12, 9, -21])[-21, -12, 5, 9, 36]

此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

>>> sorted([36, 5, -12, 9, -21], key=abs)[5, 9, -12, -21, 36]

key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。对比原始的list和经过key=abs处理过的list:

list = [36, 5, -12, 9, -21]keys = [36, 5,  12, 9,  21]

笔记要点:

sorted函数,针对的对象是list内的元素!不是整个list,所以,在key=函数这个应用时,是直接作用于元素对象上,并非list上!!!

我们来看下面的课后练习

以下list做出2道题,1:按照名字排列 2:按照分数排列

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

第一题:

def by_name(t):

return t[0] # 这里返回的t[0],并不是list的0号位置元素,而list内元素的0号位置,所以,他指向的是('Bob',75)的0号位

L1 = sorted(L,key=by_name)

print (L1)

第二题

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(t):
return t[1]
L2 = sorted(L,key=by_score)
print (
L2[::-1]) #我是在最后进行了反转,但是看了别人的程序后,其实可以在sorted里面一步完成,因为sorted函数不光可以用key,在key指代函 数的后面,还可以添加reverse=True ,所以以下程序更优化。

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(t):
    return t[1]
L2 = sorted(L, key=by_score,
reverse=True)
print (L2)




0 0
原创粉丝点击