1、排序
sort() 没有返回值,在原数据上操作
正序排列
list1 = [2, 5, 4, 9, 5, 7, 48, 6, 1, 3]
list1.sort()
print(list1)
# [1, 2, 3, 4, 5, 5, 6, 7, 9, 48]
倒序排列
list1 = [2, 5, 4, 9, 5, 7, 48, 6, 1, 3]
list1.sort(reverse=True)
print(list1)
# [48, 9, 7, 6, 5, 5, 4, 3, 2, 1]
sorted() 有返回值,返回新的序列
list1 = [2, 5, 4, 9, 5, 7, 48, 6, 1, 3]
list2 = sorted(list1)
print(list1)
print(list2)
# [2, 5, 4, 9, 5, 7, 48, 6, 1, 3]
# [1, 2, 3, 4, 5, 5, 6, 7, 9, 48]
也可以倒序
list1 = [2, 5, 4, 9, 5, 7, 48, 6, 1, 3]
list2 = sorted(list1, reverse=True)
print(list1)
print(list2)
# [2, 5, 4, 9, 5, 7, 48, 6, 1, 3]
# [48, 9, 7, 6, 5, 5, 4, 3, 2, 1]
可指定排序规则
按绝对值排序
list1 = [2, 5, -4, -9, -5, 7, 48, -6, 1, 3]
list2 = sorted(list1, key=abs)
print(list1)
print(list2)
# [2, 5, -4, -9, -5, 7, 48, -6, 1, 3]
# [1, 2, 3, -4, 5, -5, -6, 7, -9, 48]
字典排序
dic = {
'a': 2,
'd': 7,
'b': 12,
'f': 3,
'c': 1
}
dic_lis: list = sorted(dic.items(), key=lambda d: d[1])
print(dict(dic_lis))
# {'c': 1, 'a': 2, 'f': 3, 'd': 7, 'b': 12}
二、类属性和类方法
使用 类名() 创建对象
1、创建出来的 对象 叫做 类 的 实例
2、创建对象的 动作 叫做 实例化
3、对象的属性 叫做 实例属性
4、对象调用的方法 叫做 实例方法
在程序运行时,类同样会被加载到内存。在Python中,类 是一个特殊的对象 —— 类对象。在程序运行时,类对象在内存中只有一份,使用一个类可以创建出很多个对象实例。除了封装实例的属性和方法外,类对象还可以拥有自己的属性和方法
- 类属性
- 类方法
通过 类名.类属性 或 类名.类方法 的方式可以访问类的属性或者调用类的方法
访问类属性可以有两种方式
类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本。对于公有的类属性,在类外可以通过类对象和实例对象访问。如果在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性
类方法是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数,能够通过实例对象和类对象去访问。类方法还有一个用途就是可以对类属性进行修改。
class A(object):
a = 10
def __init__(self):
self.b = 12
@classmethod
def get_a(cls):
return cls.a
def get_b(self):
return self.b
# 访问类属性
print(A.a) # 10
# 访问类方法
print(A.get_a()) # 10
# 修改类属性
A.a = 100
print(A.a) # 100
print(A.get_a()) # 100
# 创建实例对象
t = A()
# 实例对象访问实例属性
print(t.b) # 12
# 实例对象访问实例方法
print(t.get_b()) # 12
# 实例对象访问类属性
print(t.a) # 100
# 实例对象访问类方法
print(t.get_a()) # 100
# 实例对象对类属性赋值,实际是实例对象添加了新的属性,类属性并没有改变
t.a = 200
print(t.a) # 200
print(A.a) # 100
print(id(A.a)) # 1437297984
print(id(t.a)) # 1437301184 与 A.a 并不是同一个 a