专业编程基础技术教程

网站首页 > 基础教程 正文

python sorted函数key函数透彻理解

ccvgpt 2024-07-26 00:56:14 基础教程 9 ℃

"""
sorted(iterable, key=None, reverse=False)
"""
# 参数说明:
# iterable    -- 可迭代对象。
# key         -- 关键函数:key形参用来指定在进行比较之前要在每个列表元素上进行调用的函数。
#                key 形参的值应该是一个函数,返回一个用于排序的键。这种技巧速度很快,因为对于每个输入记录只会调用一次key函数。
# reverse     -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
# 返回值
# 返回重新排序的列表。

# 示例代码1
string = 'This is a test string from Andrew'
print(sorted(string.split()))  # ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']
print(sorted(string.split(), key=str.lower))  # ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

# 示例代码2
# 一种常见的模式是使用对象的一些索引作为键对复杂对象进行排序。例如:
data_tuples = [
    ('白展堂', '白玉盗圣', 26),
    ('李大嘴', '知名厨子', 22),
    ('吕秀才', '关中大侠', 21),
]
print(sorted(data_tuples, key=lambda tps: tps[2], reverse=True))  # sort by the three para!
# 输出:
# [('白展堂', '白玉盗圣', 26), ('李大嘴', '知名厨子', 22), ('吕秀才', '关中大侠', 21)]

# 示例代码3
class Student:
    def __init__(self, name, grade, age):
        self.name = name
        self.grade = grade
        self.age = age

    def __repr__(self):
        return repr((self.name, self.grade, self.age))


student_objects = [
    Student('白展堂', '葵花点穴', 26),
    Student('李大嘴', '秀莲神掌', 21),
    Student('燕小六', '七舅姥爷', 19),
]

print(sorted(student_objects, key=lambda student: student.age))  # sort by age
# [('燕小六', '七舅姥爷', 19), ('李大嘴', '秀莲神掌', 21), ('白展堂', '葵花点穴', 26)]

最近发表
标签列表