首页 > 编程语言 >Python教程:sort和sorted实现排序之对比

Python教程:sort和sorted实现排序之对比

时间:2024-07-10 15:40:50浏览次数:8  
标签:sort Python aList 列表 key sorted 排序

总的来说,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]))

标签:sort,Python,aList,列表,key,sorted,排序
From: https://www.cnblogs.com/python1111/p/18294199

相关文章

  • 要将 Python 脚本制作成可执行程序,您可以使用以下几种方法:
    要将Python脚本制作成可执行程序,您可以使用以下几种方法:1.使用PyInstallerPyInstaller是一个非常流行的工具,可以将Python脚本打包成独立的可执行文件,支持Windows、macOS和Linux。您可以按照以下步骤进行操作:安装PyInstaller:复制代码pipinstallpyinstaller......
  • Python实现爬虫并输出
    1.Python爬虫并输出示例下面是一个使用Python编写的简单网络爬虫示例,该爬虫将抓取某个网页(例如,我们假设为https://example.com,但请注意实际使用时我们需要替换为一个真实且允许抓取的网站)的标题(Title)并打印出来。由于直接访问和抓取真实网站可能涉及版权和法律问题,这里我们仅提......
  • 【AI和大模型】AI到底和大模型有什么区别?机器学习,深度学习,python,NPL
    什么是AI?AI是一个广泛的领域,涵盖了模拟和扩展人类智能的多种理论和技术;而大模型是AI领域中的一种具体技术,特别是在自然语言处理(NLP)方面取得了显著进展的深度学习模型。大模型通常指的是具有大量参数的深度学习模型,它们通过在大规模数据集上进行训练,能够学到丰富的数据表示和模......
  • python执行shell并获取结果
    在Python中执行Shell命令并获取其结果,通常可以使用subprocess模块。这个模块允许我们启动新的进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。下面是一个详细的示例,展示了如何使用subprocess.run()函数来执行Shell命令并获取其输出。1.示例一:使用subprocess.run()执行l......
  • 《用Python学数学-2021》 ([美] 彼得 • 法雷尔(Peter Farrell) [Farrell) etc.)
    pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso提取码:jqso一、问题背景高等数学应用非常广,基本上涉及到函数的地方都要用到微积分,还有在几何方面也是如此,计算机的应用让我们能简单快速处理各种高等数学中的计算,比如极限、导数、积分、微分方程等的计算。二、实验目的......
  • pip is configured with locations that require TLS/SSL, however the ssl module in
    使用Ubuntu16.04(已内置python2.7)安装python3.10之后,再使用pip3安装包的时候总是报错:WARNING:pipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmoduleinPythonisnotavailable.Lookinginindexes:https://pypi.tuna.tsinghua.edu.cn/simpleRequi......
  • 射线法检查一个点在不在多边形内-python 实现
    参考文档:https://www.cnblogs.com/muyefeiwu/p/11260366.htmlhttps://blog.csdn.net/liangzhaoyang1/article/details/51088475代码:点击查看代码#encoding=utf8importnumpyasnpfromcollectionsimportnamedtuplePoint=namedtuple("Point",["x",......
  • 用kali学Python第7章用户输入和while循环的代码截图和分析
    第7章   用户输入和while循环用户输入演示代码7-1name=input("Pleaseenteryourname:")print(f"\nHello,(name)!”)运行结果Pleaseenteryourname:iTuringHello,iTuring!字符串转换其他类型•int(string):将字符串转换为整数值。•float(string):将字符串......
  • Lbview调用python脚本报错:错误1667...无法导入指定的python模块
    前提注意:NILabVIEW2021(32位)Python3.9.10(32位)32位对应32位,64位同理,否则可能会报错报错的原因:LabVIEW中使用的Python环境与安装的Python包不匹配也就是说Labview中使用的是python版本安装的系统路径,而PyCharm使用的虚拟环境路径,它的包都是下载到项目文件夹内可......
  • 数据结构--单向链表篇(python实现)
    写在开头链表(Linkedlist)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)链表的优缺点优点不需要预先知道数据大小,实现灵活的内存动态管理插入、删除指定数据速度快缺点读取指定位置数据速......