一文搞懂Python中的排序方法(讲义)

一、列表(list)的成员函数sort:只适用于列表对象的排序,且排序后的结果会修改、覆盖该列表对象。

x = [8, 5, 6, 10, 9, 3, 1, 2]

x.sort()
print('对x按升序排序:', x)

x.sort(reverse=True)
print('对x按降序排序:', x)
对x按升序排序: [1, 2, 3, 5, 6, 8, 9, 10]
对x按降序排序: [10, 9, 8, 6, 5, 3, 2, 1]

二、sorted:属于Python的内置函数,可对任意可迭代对象进行排序,排序的结果以一个新的列表(list)返回,不影响原迭代对象。

print('对字符串“python”进行拆分排序:',sorted('python'))

x = [8, 5, 6, 10, 9, 3, 1, 2]
print('对x按降序排序:', sorted(x, reverse=True))
print('x依然还是原来的x:',x)
对字符串“python”进行拆分排序: ['h', 'n', 'o', 'p', 't', 'y']
对x按降序排序: [10, 9, 8, 6, 5, 3, 2, 1]
x依然还是原来的x: [8, 5, 6, 10, 9, 3, 1, 2]

三、除上述差异外,sort、sorted两者的参数及相关用法完全一致。

# 学生信息:姓名、等级、成绩
students = [('Mike', 'A', 88), ('Jack', 'A', 99), 
            ('Andy', 'B', 77), ('John', 'C', 66)]

# 按姓名排序:
s = sorted(students, key=lambda student: student[0])
print('按姓名排序:', s)

# 先按等级由高到底,在等级相同的情况下再按成绩由高到低排序:
# 注意&思考一下:
#   1.为啥返回的是元组? 
#   2.成绩前面为啥有个负号?
s = sorted(students, key=lambda student: (student[1], -student[2]))
print('按等级、成绩排序:', s)
按姓名排序: [('Andy', 'B', 77), ('Jack', 'A', 99), ('John', 'C', 66), ('Mike', 'A', 88)]
按等级、成绩排序: [('Jack', 'A', 99), ('Mike', 'A', 88), ('Andy', 'B', 77), ('John', 'C', 66)]
# 补充一下元组相互比较的知识
# 以下比较均为True:
print(('A',  88)  == ('A',  88))
print(('A',  99)  >  ('A',  88))
print(('A', -99)  <  ('A', -88))
print(('A',  99)  <  ('B',  99))
True
True
True
True

总结:sort对列表自己进行排序(“克己”);sorted对迭代对象输出列表格式的排序结果(“利人”)。通过key及reverse关键字参数,灵活运用排序方式。

Python是一门支持面向对象编程的语言,它通过类(Class)和对象(Object)的概念实现了这一特性。以下是关于Python面向对象编程的一般理解: 1. **类(Class)**:类是一种模板或蓝图,用于创建具有相似属性和行为的对象。类定义了数据成员(如变量)和方法(函数),它们描述了对象的状态和行为。 2. **对象(Object)**:对象是类的实例,它是现实世界的一个实体。每个对象都具有特定的属性值,并能够执行其类定义的方法。 3. **属性(Attribute)**:类的变量就是对象的属性,它们可以存储数据。比如,一个人类对象可能有姓名、年龄这样的属性。 4. **方法(Method)**:类的函数是对象的行为,例如获取信息(getter)、设置信息(setter)、执行动作等。比如,人的类可能有一个方法“说话”(speak)。 5. **封装(Encapsulation)**:将数据和操作数据的代码打包成类,隐藏实现细节,仅对外提供接口访问,保护数据的安全性。 6. **继承(Inheritance)**:子类可以继承父类的属性和方法,通过"IS-A"关系实现代码复用。子类可以添加新的属性和方法,也可以覆盖或扩展父类的方法。 7. **多态(Polymorphism)**:同一种行为可以在不同的对象上表现出不同的形式,包括静态多态(方法重载)和动态多态(方法重写或虚函数)。 8. **构造函数(Constructor)**:特殊的方法,当创建新对象时自动执行,通常用于初始化对象的属性。 9. **析构函数(Destructor)**:特殊的方法,在对象生命周期结束时自动执行,用于清理资源。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值