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

相关文章:

  • 2021-09-14
  • 2021-07-22
  • 2021-12-29
  • 2021-12-05
  • 2021-10-24
  • 2021-11-08
  • 2021-12-12
  • 2021-09-12
猜你喜欢
  • 2021-07-25
  • 2021-05-16
  • 2022-01-03
  • 2021-12-12
  • 2021-08-20
  • 2022-01-19
  • 2021-11-23
相关资源
相似解决方案