一、列表(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关键字参数,灵活运用排序方式。