参考:sorted
NOTE
1.sorted,快速排序,时间复杂度O(nlogn)渐进最优.
#!/usr/bin/env python3
L = []
for i in range(10):
L.append(int(input()))
SortedL = sorted(L)
print(SortedL)
上例:sorted函数返回排序好的list。
sh-3.2# ./sorted1.py
-10
2
99
78
24
-100
92
33
12
63
[-100, -10, 2, 12, 24, 33, 63, 78, 92, 99]
2.Python的sorted函数支持传入特定的函数,先将该函数作用于所有的列表元素,再进行排序。注意,该函数是用于比较大小的依据。
absortL = sorted(L, key=abs)
print(absortL)
-10
2
99
78
24
-100
92
33
12
63
[2, -10, 12, 24, 33, 63, 78, 92, 99, -100]
eg.
list = [36, 5, -12, 9, -21]
keys = [36, 5, 12, 9, 21]
keys排序结果 => [5, 9, 12, 21, 36]
| | | | |
最终结果 => [5, 9, -12, -21, 36]
3.默认情况下,对字符串排序,是按照ASCII的大小比较的.
L1 = []
for i in range(5):
L1.append(input())
print(sorted(L1))
Chen
Michael
Xu
Li
Wang
['Chen', 'Li', 'Michael', 'Wang', 'Xu']
实现忽略大小写的排序(借助lower()函数将所有字符串变为小写再比较):
print(sorted(L1, key=str.lower))
chen
Li
Xu
Wang
michael
['chen', 'Li', 'michael', 'Wang', 'Xu']
4.要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
chen
Li
Xu
Wang
michael
['chen', 'Li', 'michael', 'Wang', 'Xu']
['Xu', 'Wang', 'michael', 'Li', 'chen']
print(sorted(L1, key=str.lower, reverse=True))
5.使用sorted函数的关键在于key函数的实现,本质上key函数不同于C语言中的cmp函数,也就是说它不是比较型函数(返回bool),事实上key函数是将传入的参数(待排序的元素)进行某种转换并返回结果。sorted函数通过key函数将其元素逐一进行映射,并根据映射得到的序列进行排序,最后依据得到的序列对原有序列进行排序。
Practice
假设我们用一组tuple表示学生名字和成绩:
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
请用sorted()对上述列表分别按名字排序:
#!/usr/bin/env python3
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
return t[1]
L2 = sorted(L, key=by_name)
print(L2)
sh-3.2# ./sorted2.py
[('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]
2017/2/16