1.sorted
sorted() 函数对所有可迭代的对象进行排序操作。
注意:sort 与 sorted 区别:
sorted 语法:
sorted(iterable, key=None, reverse=False)
实例:
# -*- coding: utf-8 -*-
# @Time : 2022/3/31 15:34
# @File : sorted.py
# @Software : PyCharm
list=[23,14,9,-22,-17,6,-28,23,12,31,-5]
print(sorted(list))
#此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序
print(sorted(list,key=abs))
#倒序输出
print(sorted(list,key=abs,reverse=True))
#排序dict
citys={"029":"西安","021":"上海","027":"武汉","010":"北京"}
for k in sorted(citys):
print(k,"=",citys[k])
运行结果:
[-28, -22, -17, -5, 6, 9, 12, 14, 23, 23, 31]
[-5, 6, 9, 12, 14, -17, -22, 23, 23, -28, 31]
[31, -28, 23, 23, -22, -17, 14, 12, 9, 6, -5]
010 = 北京
021 = 上海
027 = 武汉
029 = 西安
下面是一个更复杂的实例,对奖牌榜就行排序,数据里面包含了15个国家的金、银、铜数据,使用 \n 作为分隔符。按照金、银,铜奖品数量降序排序。
# -*- coding: utf-8 -*-
# @Time : 2022/3/31 15:45
# @File : sorted2.py
# @Software : PyCharm
nations = "德国 10 11 16\n意大利 10 10 20\n荷兰 10 12 14\n法国 10 12 11\n英国 22 21 22\n中国 38 32 18\n日本 27 14 17\n美国 39 41 33\n俄罗斯奥委会 20 28 23\n澳大利亚 17 7 22\n匈牙利 6 7 7\n加拿大 7 6 11\n古巴 7 3 5\n巴西 7 6 8\n新西兰 7 6 7"
stodata = nations.split('\n', -1)
# 使用sorted
para = {}
for line in range(len(stodata)):
# 每一行数据
data = stodata[line].split(' ')
print(data)
# 组装数据结构para={'China': [], 'Russia': []}
para[data[0]] = [int('-' + i) for i in data[1:]]
# 开始排序(x[1]代表奖牌数目, x[0]代表国家)
new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))
print()
c = []
for i in new_para:
c.append((i[0]))
for j in range(15):
print(f"{(j + 1):2d} {c[j]}")
运行结果:
['德国', '10', '11', '16']
['意大利', '10', '10', '20']
['荷兰', '10', '12', '14']
['法国', '10', '12', '11']
['英国', '22', '21', '22']
['中国', '38', '32', '18']
['日本', '27', '14', '17']
['美国', '39', '41', '33']
['俄罗斯奥委会', '20', '28', '23']
['澳大利亚', '17', '7', '22']
['匈牙利', '6', '7', '7']
['加拿大', '7', '6', '11']
['古巴', '7', '3', '5']
['巴西', '7', '6', '8']
['新西兰', '7', '6', '7']
1 美国
2 中国
3 日本
4 英国
5 俄罗斯奥委会
6 澳大利亚
7 荷兰
8 法国
9 德国
10 意大利
11 加拿大
12 巴西
13 新西兰
14 古巴
15 匈牙利