python 高阶函数 (三)--sorted

排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。

可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序

a = [36, 5, -3, -21, 103]
a1 = sorted(a)    # [-21, -3, 5, 36, 103]
a2 = sorted(a, key=abs)   # [-3, 5, -21, 36, 103]

对字符串排序

s = ['bob', 'about', 'Zoo', 'Credit']
s1 = sorted(s)   # ['Credit', 'Zoo', 'about', 'bob']
s2 = sorted(s, key=str.lower)  # ['about', 'bob', 'Credit', 'Zoo']
s3 = sorted(s, key=str.lower, reverse=True)   # ['Zoo', 'Credit', 'bob', 'about']
s4 = sorted(s, key=str.upper)  # ['about', 'bob', 'Credit', 'Zoo']

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

练习题:用一组tuple表示学生名字和成绩
1)根据名字排序
2)按成绩从高到低排序

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

def by_name(t):
    return t[0].lower()


def by_score(t):
    return t[1]


L1 = sorted(L, key=by_name)   # [('Adam', 80), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
L2 = sorted(L, key=by_score, reverse=True)   # [('Lisa', 88), ('Adam', 80), ('Bob', 75), ('Bart', 66)]

猜你喜欢

转载自blog.csdn.net/weixin_33951761/article/details/87347839