← 返回首页
Python3基础教程(二十五)
发表时间:2022-03-31 15:48:51
sorted

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  匈牙利