python3----函数(sort和sorted)
在学习python的过程中,感觉python中的排序相和c++中的泛型算法还是比较相似的,但相对于c++而言更加简单易用。
python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性的sorted()函数则对所有可迭代的序列都是适用的;并且sort()函数是内置函数,会改变当前对象,而sorted()函数只会返回一个排序后的当前对象的副本,而不会改变当前对象。
1、内置函数sort()
原型:sort(fun,key,reverse=False)
参数fun是表明此sort函数是基于何种算法进行排序的,一般默认情况下python中用的是归并排序,并且一般情况下我们是不会重写此参数的,所以基本可以忽略;
参数key用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;
参数reverse是用来表明是否逆序,默认的False情况下是按照升序的规则进行排序的,当reverse=True时,便会按照降序进行排序。
下面 通过简单的例子进行解说:
from operator import attrgetter,itemgetter list1 = [(2,'huan',23),(12,'the',14),(23,'liu',90)] #使用默认参数进行排序,即按照元组中第一个元素进行排序
list1.sort()
print(list1)
#输出结果为[(2, 'huan', 23), (12, 'the', 14), (23, 'liu', 90)] #使用匿名表达式重写key所代表的函数,按照元组的第二个元素进行排序
list1.sort(key=lambda x:(x[1]))
print(list1)
#[(2, 'huan', 23), (23, 'liu', 90), (12, 'the', 14)] #使用匿名表达式重写key所代表的函数,按照元组的第三个元素进行排序
list1.sort(key=lambda x:(x[2]))
print(list1)
#[(12, 'the', 14), (2, 'huan', 23), (23, 'liu', 90)] #使用匿名函数重写key所代表的函数,先按照元组中下标为2的进行排序,
# 对于下标2处元素相同的,则按下标为0处的元素进行排序
list1.sort(key=lambda x:(x[2],x[0]))
print(list1)
#[(12, 'the', 14), (2, 'huan', 23), (23, 'liu', 90)] #使用operator模块中的itemgetter函数进行重写key所代表的函数,按照下标为1处的元素进行排序
list1.sort(key=itemgetter(1))
print(list1)
#[(2, 'huan', 23), (23, 'liu', 90), (12, 'the', 14)] #使用operator模块中的itemgetter函数进行重写key所代表的函数,按照下标为2处的元素进行排序
list1.sort(key=itemgetter(2))
print(list1)
# [(12, 'the', 14), (2, 'huan', 23), (23, 'liu', 90)] # 此处可以类比lambda中的排序方法,就不再解释
list1.sort(key=itemgetter(2,0))
print(list1)
#[(12, 'the', 14), (2, 'huan', 23), (23, 'liu', 90)]
对于上述中的匿名函数大家如果 不了解的可以自己去了解一下,这里我就不展开了。
这里我想解释一下operator这个模块中的两个函数:
(1)itemgetter
operator.itemgetter(item)operator.itemgetter(*items)这个函数会调用所传入的操作数的__getitem__()方法返回一个带有item的可调用对象,如果传入的参数是多个,那么返回带有一个元组类型的可调用对象。例如: f = itemgetter(2), 调用 f(r) 后,将会返回r[2] g = itemgetter(2, 5, 3), 调用 g(r) 后将会返回元组 (r[2], r[5], r[3]). (2)attrgetteroperator.attrgetter(attr)operator.attrgetter(*attrs)这个函数返回一个带有操作数中的attr属性的可调用对象,如果多个属性被传入,那么返回带有这些属性的元组。这些属性的名字里可以包含包含多个子名字例如:f = attrgetter('name'), 调用f(b) 将返回b.name.f = attrgetter('name', 'date'), 调用 f(b) 将返回(b.name, b.date).f = attrgetter('name.first', 'name.last'), 调用f(b) 将返回 (b.name.first, b.name.last).
2、全局函数sorted()
对于sorted()函数中key的重写,和sort()函数中是一样的,所以刚刚对于sort()中讲解的方法,都是适用于sorted()函数中,在下面的解释中我也就不再列举了,并且下面将要讲解的key的重写也同样是适用于sort()函数的,那么为什么不再sort()函数中列举完呢,那是为了不偏不倚,给大家一个客观地理解。
下面仍然从一个例子切入:
from operator import attrgetter
class Data:
article_name = str()
readers = 0
def __init__(self,tpl):
self.article_name = tpl[0]
self.readers = tpl[1]
def getKey(self):
return self.readers
def __str__(self):
return str(str(self.article_name)+str(':')+str(self.readers)) list1 = [Data(("java",100)),Data(("c++",100)),Data(("python",89)),Data(("c++",90))] #此处调用attrgetter函数使得按照readers进行排序
list2 = sorted(list1,key=attrgetter("readers"))
"""结果为
python:89
c++:90
java:100
c++:100
""" #此处使得list1先按照article_name进行排序,对于名字相同的再按照readers进行排序
list3 = sorted(list1,key=attrgetter("article_name","readers"))
"""
结果为:
c++:90
c++:100
java:100
python:89
""" #使用类中的自定义函数也同样可以操作
list4 = sorted(list1,key = Data.getKey)
"""
结果为:
python:89
c++:90
java:100
c++:100
"""
上面例子的结果都是通过打印出来的结果。
对于sorted()函数,同样可以使用sort()函数中介绍的方法,大家可以自己进行尝试。
当然最后说一下,在上面所有的例子中我都没有使用到reverse参数,对于这个参数,是用于控制排序的方向的,大家可以自己试试,在这里也就不介绍了。
python3----函数(sort和sorted)的更多相关文章
- Python3:排序函数sort() 和 sorted() 之介绍
今天来讲一下Python中的排序函数.Python中有2个内建的排序函数,分别为sort() 和 sorted() 下面介绍分别介绍一下2个函数: 1.有一个列表 :a=[1,4,5,88,0,7], ...
- [python学习] 语言基础—排序函数(sort()、sorted()、argsort()函数)
python的内建排序函数有 sort.sorted两个. 1.基础的序列升序排序直接调用sorted()方法即可 ls = list([5, 2, 3, 1, 4]) new_ls = sorted ...
- python排序函数sort()与sorted()区别
sort是容器的函数:sort(cmp=None, key=None, reverse=False) sorted是python的内建函数:sorted(iterable, cmp=None, key ...
- sort与sorted的区别
描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 : 方法1.用对List的成员函数sort进行排序 方法2.用内置函数sorte ...
- 剑指offer第32题:把数组排成最小的数及关于list.sort()和sorted( Iterable object )函数的相关知识
* 解题思路: * 先将整型数组转换成字符数组,然后将String数组排序,最后将排好序的字符串数组拼接出来.关键就是制定比较规则. * 排序规则如下: * 若ab > ba 则 a & ...
- Python中sort与sorted函数
python中列表的内置函数sort()可以对列表中的元素进行排序,而全局性的sorted()函数则对所有可迭代的序列都是适用的: 并且sort()函数是内置函数,会改变当前对象,而sorted()函 ...
- python几个排序函数 sort sorted argsort
Python中排序常用到的sort .sorted和argsort函数 [摘要:Python中sort 战 sorted函数 一 .先容 sort函数是list列表中的函数,而 sorted能够对li ...
- python sort和sorted函数
sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 ...
- Python排列函数:sort、sorted
排序函数介绍:sort()和sorted()都属于Python list的排序方法 区别:sort()属于永久性排列,直接改变该list: sorted属于暂时性排列,会产生一个新的序列. #sort ...
- Python中sort和sorted函数代码解析
Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...
随机推荐
- iOS:延迟加载和上拉刷新/下拉加载的实现
lazy懒加载(延迟加载)UITableView 举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要 ...
- centos和ubuntu下pycharm无法输入中文的解决办法
编辑启动的脚本文件 vim /usr/bin/pycharm ubuntu下添加 export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export ...
- 'telnet' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
Win7或者win8等是默认没有安装telnet功能,所以你直接用telnet命令是用不了的: 下面介绍在win8下面如何操作:“控制面板”-->“程序”(在左下角)-->程序和功能--- ...
- solr6.6 索引 word文档
本文是solr6.6 导入 pdf/doc/txt/json/csv/xml文件 的继续,上篇在索引文件,唯独07格式的word文档不能正常抽取数据,进过研究测试终于,记录下属过程. 其它步骤基本和s ...
- Windows下搭建基于SSH的Git服务器
Git客户端安装 客户端要同时安装在远程服务器和自己的电脑上,下载地址:http://msysgit.github.io/ 选择安装组件 :也可以默认选择; 图标组件(Addition icons) ...
- Kafka 简单实验二(Python实现简单生产者消费者)
Apache Kafka 是什么? Kafka 是一个开源的分布式流处理平台,其简化了不同数据系统的集成.流指的是一个数据管道,应用能够通过流不断地接收数据.Kafka 作为流处理系统主要有两个用处: ...
- Gitlab安装部署及基础操作
环境说明 系统版本 CentOS 7.2 x86_64(较新版本的gitlab集成了更多功能,顺利运行起来的硬件要求较高,这里给了3G内存) 软件版本 gitlab-ce-10.8.4 GitLa ...
- [转]SQL Server 性能调优(io)
目录 诊断磁盘io问题 常见的磁盘问题 容量替代了性能 负载隔离配置有问题 分区对齐配置有问题 总结 关于io这一块,前面的东西如磁盘大小,磁盘带宽,随机读取写入,顺序读取写入,raid选择,DA ...
- 使用Python实现生产者消费者问题
之前用C++写过一篇生产者消费者的实现. 生产者和消费者主要是处理互斥和同步的问题: 队列作为缓冲区,需要互斥操作 队列中没有产品,消费者需要等待,直到生产者放入产品并通知它.队列慢的情况类似. 这里 ...
- pngCanvas 是一个使用纯Python代码的生成png图像的工具
#!/usr/bin/env python """Simple PNG Canvas for Python - updated for bytearray()" ...