python中的sort和sorted的区别

list.sort(key=**):sort 对列表进行排序,是对原序列排序,不生成新的列表。

students = [['zhangsan', 'B', 85], ['lisi', 'C', 90], ['wangwu', 'A', 88]] # 可以
# students = [('zhangsan', 'B', 85), ('lisi', 'C', 90), ('wangwu', 'A', 88)] # 可以
# students = (['zhangsan', 'B', 85], ['lisi', 'C', 90], ['wangwu', 'A', 88]) # 报错
# students = (('zhangsan', 'B', 85), ('lisi', 'C', 90), ('wangwu', 'A', 88)) # 报错

print(students, id(students))
students.sort(key=lambda x: x[0][-1]) # 按照名字末尾字符升序排列
print(students, id(students))
students.sort(key=lambda x: x[1])     # 按照等级升序排列
print(students, id(students))
students.sort(key=lambda x: x[2], reverse=True) # 按照分数降序排列
print(students, id(students))

依次返回:

[['zhangsan', 'B', 85], ['lisi', 'C', 90], ['wangwu', 'A', 88]] 1168182589568
[['lisi', 'C', 90], ['zhangsan', 'B', 85], ['wangwu', 'A', 88]] 1168182589568
[['wangwu', 'A', 88], ['zhangsan', 'B', 85], ['lisi', 'C', 90]] 1168182589568
[['lisi', 'C', 90], ['wangwu', 'A', 88], ['zhangsan', 'B', 85]] 1168182589568

sorted(seq, key=**):sorted 对序列进行排序,生成新的序列。

# students = [['zhangsan', 'B', 85], ['lisi', 'C', 90], ['wangwu', 'A', 88]] # 可以
# students = [('zhangsan', 'B', 85), ('lisi', 'C', 90), ('wangwu', 'A', 88)] # 可以
# students = (['zhangsan', 'B', 85], ['lisi', 'C', 90], ['wangwu', 'A', 88]) # 可以
students = (('zhangsan', 'B', 85), ('lisi', 'C', 90), ('wangwu', 'A', 88)) # 可以

print(students, id(students))
student1 = sorted(students, key=lambda x: x[0][-1]) # 按照名字末尾字符升序排列
print(student1, id(student1))
student2 = sorted(students, key=lambda x: x[1])     # 按照等级升序排列
print(student2, id(student2))
student3 = sorted(students, key=lambda x: x[2], reverse=True) # 按照分数降序排列
print(student3, id(student3))

from operator import itemgetter
student4 = sorted(students, key=itemgetter(1), reverse=True) # 按照等级降序排列
print(student4, id(student4))
student5 = sorted(students, key=itemgetter(1, 2)) # 先按照等级降序排列,再按照分数兼续排列
print(student5, id(student5))

依次返回:

(('zhangsan', 'B', 85), ('lisi', 'C', 90), ('wangwu', 'A', 88)) 2099748351808
[('lisi', 'C', 90), ('zhangsan', 'B', 85), ('wangwu', 'A', 88)] 2099748305856
[('wangwu', 'A', 88), ('zhangsan', 'B', 85), ('lisi', 'C', 90)] 2099748584128
[('lisi', 'C', 90), ('wangwu', 'A', 88), ('zhangsan', 'B', 85)] 2099748584064
[('lisi', 'C', 90), ('zhangsan', 'B', 85), ('wangwu', 'A', 88)] 2099748583872
[('wangwu', 'A', 88), ('zhangsan', 'B', 85), ('lisi', 'C', 90)] 2099748342080

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值