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 ...
随机推荐
- 如何在oracle中导入dmp数据库文件
Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利 ...
- USACO Section 3.1: Contact
算法简单,写起来遇到些小问题 /* ID: yingzho1 LANG: C++ TASK: contact */ #include <iostream> #include <fst ...
- Docker仓库搭建(Registry + Portus)
1.更新系统: yum update -y 2. 安装docker-compos yum -y install epel-release #pip安装包在epel源中 yum -y inst ...
- Codecademy For Python学习笔记
一.Python Lists and Dictionaries: 1. 2.
- linux中/etc/init.d [转]
一.关于/etc/init.d 如果你使用过linux系统,那么你一定听说过init.d目录.这个目录到底是干嘛的呢?它归根结底只做了一件事情,但这件事情非同小可,是为整个系统做的,因此它非常重要.i ...
- 深入理解Java内存模型(一)——基础
并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体).通信是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信 ...
- Mac 如何截屏(快捷键)
全屏截图:Command + Shift + 3 使用快捷键后会马上截取当前的全屏 指定区域截图:Command + Shift + 4 使用快捷键后会出来一个带有座标的瞄准器,用鼠标的拖放可以选择需 ...
- DHT11温湿度传感器
一.硬件介绍 RH是相对湿度,是用零点温度来定义的,一般,RH在45%~65%之间最为合适. 注:NTC为热敏电阻,输出为:单总线数字信号,单线双向串行通讯. 注:上拉电阻情况下,配置为开漏输出,可以 ...
- XML Schema使用技巧——unique
XML Schema使用技巧——unique XML Scheam允许指定某个元素或属性的值在一定得范围内是唯一的.为了指定元素或属性值的唯一性,可以使用<xs:unqiue>元素,使 ...
- 关于VECTOR和DEQUE
http://www.cnblogs.com/ixnehc/archive/2008/09/02/1282356.html *.先说内部结构.vector就是一块连续的内存,这块连续的内存会随着成员 ...