Bendi新闻
>
Python教程:sort和sorted实现排序之对比
Python教程:sort和sorted实现排序之对比
4月前
总的来说,sort 是应用在列表上的方法,修改原始列表。
内建函数 sorted 可对所有可迭代的对象进行排序操作,返回新的对象。
list.sort() 方法效率会比 sorted(iter) 稍微高些。
一、sort函数
sort() 函数用于对原列表进行排序,如果指定参数,则依据指定的函数进行排序。
列表才可以进行修改,元组无法修改。
1.语法
list.sort(cmp=None, key=None, reverse=False)
# cmp参数在python2.0中存在
# 3.0版本已删除
2.参数
cmp -- 可选 使用该参数方法进行排序
key -- 用来进行比较的元素 取自可迭代对象
reverse -- 排序规则
reverse=True -- 降序
reverse=False -- 升序(默认)
该方法对原始列表进行排序,无返回。
3.实操
# 升序
aList = [5, 4, 1, 3, 6, 2]
aList.sort() # [1, 2, 3, 4, 5, 6]
# 降序
aList = [5, 4, 1, 3, 6, 2]
aList.sort(reverse=True)
aList # [6, 5, 4, 3, 2, 1]
# 指定元素排序
# 获取列表第2个元素
def takeSecond(elem):
return elem[1]
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
random.sort(key=takeSecond)
random # [(4, 1), (2, 2), (1, 3), (3, 4)]
# 按长度
x = ['a', 'bbb', 'cc']
x.sort(key=len)
print(x) # ['a', 'cc', 'bbb']
# 自定义比较函数
def comp(x, y):
if x < y:
return 1
elif x > y:
return -1
else:
return 0
aList = [5, 4, 1, 3, 6, 2]
aList.sort(comp) # 降序 2.0版本才支持
# 测试的当前版本不支持
4.其他技巧
生成一个排序好的副本,以及原始列表不变。
# 方法一
aList = [5, 4, 1, 3, 6, 2]
bList = aList[:] # 深度copy
# bList = aList.copy()
bList.sort()
print(aList) # [5, 4, 1, 3, 6, 2]
print(bList) # [1, 2, 3, 4, 5, 6]
# 方法二 使用sorted
aList = [5, 4, 1, 3, 6, 2]
bList = sorted(aList) # [1, 2, 3, 4, 5, 6]
通过切片操作进行拷贝,不可简单的进行赋值,否则指向的还是同一个存储地址的列表。
二、sorted函数
sorted() 函数对所有可迭代的对象进行排序操作。
1.语法
sorted(iterable, key=None, reverse=False)
2.参数
iterable -- 可迭代对象
key -- 指定可迭代对象中的一个元素
reverse -- 排序规则 降序、升序
该函数返回重新排序的列表,注意返回的都是列表。
3.实操
# 默认排序
a = [5, 2, 3, 1, 4]
sorted(a) # [1, 2, 3, 4, 5]
# 字典
b = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}
sorted(b) # [1, 2, 3, 4, 5]
# 按key排序,同时将key返回为一个列表
# 按键排序
sorted(b.items(), key=lambda x: x[0])
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078
# 按值长度排序
sorted(b.items(), key=lambda x: len(x[1]))
4.其他
# 奖牌排行
s = "德国 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 = s.split('\n', -1)
para = {}
for line in range(len(stodata)):
data = stodata[line].split(' ')
print(data)
para[data[0]] = [int(i) for i in data[1:]]
new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))
链接:https://www.cnblogs.com/python1111/p/18294199
(版权归原作者所有,侵删)
微信扫码关注该文公众号作者
来源:马哥Linux运维
相关新闻
加拿大VS美国:收入和移民对比太扎心!特鲁多被骂惨:经济白痴一张对比图看治愈了!房屋通风管道深度清洁:拯救鼻炎和过敏主人对比狗子小时候和现在的照片,无奈表示:颜值回不去了Python和AI可以在线学习了!Fedora终于要和Python 2.7说再见美国婚姻移民深度对比:K1与CR1怎么选蕞合适?CFA与FRM证书对比:区别、优先考虑顺序及考证策略!Rust编写的Web开发框架——同时支持Node和Python谷歌裁员波及Flutter和Python等团队,但没有被“杀死”——而是“地点重构”(aka异地重组)世界各国癌症死亡人数对比:数据令人揪心Python实现Excel拆分与合并离谱!多伦多网友拿出2019年超市海报:对比完吓一跳!亚裔小哥对比加拿大和美国Costco美食,加拿大赢了……这些品类美国都没有!亚裔小哥对比加拿大和美国Costco美食,加拿大赢了!这些品类美国都没有!一个对比感触:乱局与安定摩根大通:再见Python,你好SQL加拿大华人小哥对比美国和加拿大Costco物价,结果难以置信让人接受不了…InfiniBand与RoCE对比分析:AI数据中心网络选择指南Textual:为 Python 增加漂亮的文本用户界面(TUI) | Linux 中国印媒对比中印:中国如此自信,哪里来的底气深入理解Python多进程:从基础到实战python操作MySQL和实战[围观]加拿大沦为二流国家!?网红小哥对比枫叶国和乌克兰之间差异Anaconda 新 AI 路线图:更快的 Python,更轻松地应用大模型