python内建函数sorted方法概述
python中,具体到对list进行排序的方法有俩,一个是list自带的sort方法,这个是直接对list进行操作,只有list才包含的方法;另外一个是内建函数sorted方法,可以对所有可迭代的对象进行排序操作,在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的。
主要的区别在于,list的sort方法返回的是对已经存在的列表进行操作,而内建函数sorted方法返回的是一个新的list,而不是在原来的基础上进行的操作。
sorted语法如下:
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
可以看到其中第一个参数是可迭代对象,后面的参数都是具有默认值的,重点阐述如下:
1、cmp,比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0
2、key,主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序
3、reverse,是否反转,默认情况下不反转
具体的例子如下:
使用cmp参数:
def cmp_value(x,y):
if x > y :
return 1
elif x < y:
return -1
else:
return 0
so = sorted('this is a string'.split(' '),cmp=cmp_value)
print so
输出结果为:
['a', 'is', 'string', 'this']
使用key参数:
so = sorted('this Is a string'.split(' '),key=str.upper)
print so
so = sorted('This is a string'.split(' '),key=lambda x:x.lower)
print so
student = [('kel','C',30),('jun','A',25)]
so = sorted(student,key=lambda x:x[2])
print so
输出结果为:
['a', 'Is', 'string', 'this']
['is', 'string', 'This', 'a']
key参数用的比较多,多用来使用的方式为key-function,来对list数据进行处理
对复杂对象进行比较:
student = [('kel','C',30),('jun','A',25)]
so = sorted(student,key=lambda x:x[2])
print so
class Student(object):
def __init__(self,name,score,age):
self.name = name
self.score = score
self.age = age
def __repr__(self):
return repr((self.name,self.score,self.age))
student_some = [Student('kel','B',35),Student('jun','C',30)]
print sorted(student_some,key= lambda x :x.age)
输出结果为:
[('jun', 'A', 25), ('kel', 'C', 30)]
[('jun', 'C', 30), ('kel', 'B', 35)]
在对复杂对象进行比较的时候,注意其中参数的引用,在list对象中,直接用index来进行应用;在对象的时候,必须使用对象的属性来进行应用,如x.age
另外一个使用key的好处是,可以进行分组进行统计,配合使用itertools的groupby方法,代码如下:
import itertools
class Kel(object): #定一个对象,用名字和年龄来进行初始化
def __init__(self,name,age):
self.name = name
self.age = age
def __repr__(self):
return repr((self.name,self.age))
kel = [Kel('kel',25),Kel('jun',32),Kel('no',22),Kel('other',40)] #构造一个list
#比较年龄的大小,从而得出不同的年龄群体
def get_age(age):
if age.age < 20:
return 'small'
elif age.age < 30:
return 'middle'
else:
return 'old'
kel_list = sorted(kel,key=get_age) #首先用年龄来进行排序
print kel_list
for m,n in itertools.groupby(kel_list,key=get_age): #根据年龄来统计各个层次段的数据
print m
print list(n)
以上代码为根据年龄来统计年龄段的层次结果,输出结果如下:
middle
[('kel', 25), ('no', 22)]
old
[('jun', 32), ('other', 40)]
python内建函数sorted方法概述的更多相关文章
- Python中sorted()方法
Python中sorted()方法的用法 1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对iterable的解释是:iteralbe指的是能够一次返回它的一个成员的对象.i ...
- Python中sorted()方法的用法
Python中sorted()方法的用法 2012-12-24 22:01:14| 分类: Python |字号 订阅 1.先说一下iterable,中文意思是迭代器. Python的帮助文档中对i ...
- python中sorted方法和列表的sort方法使用详解
一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 ...
- python中sorted方法和列表的sort方法使用
一.基本形式 列表有自己的sort方法,器对列表进行原值排序,既然是原址排序,那显然元组不可能拥有这个方法,因为元组是不可修改的. 排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 ...
- python中的sort方法和sorted方法
一.sort()函数 描述 sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数. 语法 sort()方法语法: 1 list.sort(cmp=None, key=No ...
- python中sorted()和set()去重,排序
前言 在看一个聊天机器人的神经网络模型训练前准备训练数据,需要对训练材料做处理(转化成张量)需要先提炼词干,然后对词干做去重和排序 words = sorted(list(set(words))) 对 ...
- Python 的排序方法 sort 和 sorted 的区别
使用 sort() 或内建函数 sorted() 对列表进行排序.它们之间的区别有两点: sort() 方法是对原列表进行操作,而 sorted() 方法会返回一个新列表,不是在原来的基础上进行操作. ...
- Python 列表排序方法reverse、sort、sorted详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- python 列表排序方法sort、sorted技巧篇
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...
随机推荐
- [原]POJ-1631-Bridging signals-( 水LIS-O(nlogn) -DP)
题目大意:求最长上升子序列(LIS)长度,序列最大数不超过40000.因为只有上升排列的接口才不相交. 思路:普通的 O(n^2)的做法肯定会超时:因此,dp[ ] 记录长度为 i+1 的子序列中最末 ...
- 添加crontab为什么要重定向输出到/dev/null
如果crontab不重定向输出,并且crontab所执行的命令有输出内容的话,是一件非常危险的事情.因为该输出内容会以邮件的形式发送给用户,内容存储在邮件文件 /var/spool/mail/$use ...
- JS通用方法总结(一)
/** * id数组转换为json字符串 */ function arrayTojson(arr) { var jsonIds = "["; for ( var i = 0; i ...
- 【开发必备】吐血推荐珍藏的Chrome插件
[开发必备]吐血推荐珍藏的Chrome插件 一:(Lying人生感悟.可忽略) 青春浪漫,往往难敌事故变迁.生命对每一个人都是平等的,彼此所经历的那就一定是彼此所必须经历的,它一定不是只为了折磨.消耗 ...
- 用AngularJS开发下一代Web应用 系列入门基础教程
开篇介绍 AngularJS是什么东西?我觉得不用再描述了.可自行去充电一下.按照惯例,让我们先看看一个Hello World的开门简介吧. <!doctype html> <htm ...
- 新版本 JSAPI微信支付V3 C# DEMO
小弟在公众号后台无意中点了更新(微信支付接口升级)PS:想都没有想,心里还乐滋滋的免费的干嘛不升级...后果来了.面临着支付不能用了,代码需要重新更新. /** * JS_API支付demo * == ...
- HDU 1158 Employment Planning
又一次看题解. 万事开头难,我想DP也是这样的. 呵呵,不过还是有进步的. 比如说我一开始也是打算用dp[i][j]表示第i个月份雇j个员工的最低花费,不过后面的思路就完全错了.. 不过这里还有个问题 ...
- mysql-备份和还原(普通还原和binlog还原)
1)备份 mysqldump -uroot -proot share -l -F > /tmp/share.sql 说明:-l 锁表 -F 刷新日志文件(相当于flush logs) 2)还原( ...
- BZOJ 4004 装备购买
md有毒卡什么精度!!!! 最大线性无关组(线性基)可作为模板. #include<iostream> #include<cstdio> #include<cstring ...
- [转]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...