Python的operator.itemgetter函数和sorted函数
写这篇文章的目的是之前在《机器学习实战》用Python3实现KNN算法时用到的几个函数不太懂,
地址:
1- https://github.com/hitergelei/Self-Learning/blob/master/Machine Learning/Machine Learning in Action/2_KNN.py
2-https://github.com/apachecn/MachineLearning/blob/master/src/python/2.KNN/kNN.py
所以相关函数用法在这里做一下解析:
Python的operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。
In [10]: import operator
In [11]: a = [1,2,3]
In [12]: b = operator.itemgetter(1) //定义函数b,获取对象的第1个域的值
In [13]: b(a)
Out[13]: 2
In [14]: c = operator.itemgetter(2,1) //定义函数b,获取对象的第2个域和第1个的值
In [15]: c(a)
Out[15]: (3, 2)
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
Python的sorted函数
sorted() 函数对所有可迭代的对象进行排序操作。
sort 与 sorted 区别:
1- sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
2- list 的sort 方法返回的是对已经存在的列表进行操作,而内建函数sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
实例:
In [20]: a= [5,7,6,4,3,21,1,2]
In [21]: b = sorted(a) #保留原列表a,返回一个新列表b
In [22]: a
Out[22]: [5, 7, 6, 4, 3, 21, 1, 2] #原列表a不变
In [23]: b
Out[23]: [1, 2, 3, 4, 5, 6, 7, 21] #新列表b
sorted 语法:
sorted(iterable[, cmp[, key[, reverse]]])
参数说明:
(1) iterable :可迭代对象。
(2) cmp : cmp为函数,指定排序时进行比较的函数,可以指定一个函数或者lambda函数
即:cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。
例如students为类对象的list,没个成员有三个域,用sorted进行比较时可以自己定cmp函数,这里要通过比较第三个数据成员来排序,代码可以这样写:

注:key指定的lambda函数功能是去元素student的第三个域(即:students[2]),因此sorted排序时,会以students所有元素的第三个域来进行排序。

(注:python3 sorted取消了对cmp的支持。 )

如果我们想用第二个关键字排过序后再用第一个关键字进行排序呢?

补充另一种方法:
sorted(M, key = operator.itemgetter(1,0))
先根据第2个域排序,再根据第1个域排序

(3) key :key为函数,指定取待排序元素的哪一项进行排序,函数用上面的例子来说明,代码如下:

有了上面的operator.itemgetter函数,也可以用该函数来实现,例如要通过student的第三个域排序,可以这么写:
sorted(students, key=operator.itemgetter(2)) 默认reverse为false

sorted函数也可以进行多级排序,例如要根据第二个域和第三个域进行排序,可以这么写:
sorted(students, key=operator.itemgetter(1,2))
即先根据第二个域排序,再根据第三个域排序。

(4) reverse :是一个bool变量,表示升序还是降序排列,默认为false(升序排列),定义为True时将按降序排列。
sorted(students, key=operator.itemgetter(2),reverse = True)

sorted(students, key=operator.itemgetter(1),reverse = True)

sorted(students, key=operator.itemgetter(1,2),reverse = True)

Python的operator.itemgetter函数和sorted函数的更多相关文章
- python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函数
Python 中有非常方便高效的排序函数,下面主要介绍如何sort/sorted对list,dict进行排序. 1. 用list.sort /sorted 对list of tuples中第二个值进行 ...
- python的operator.itemgetter('click')用于定义获取'click'项的函数
python的排序参见文章http://blog.csdn.net/longshenlmj/article/details/12747195 这里介绍 import operator模块 operat ...
- python之zip函数和sorted函数
# zip()函数和sorted()函数 # zip()函数:将两个序列合并,返回zip对象,可强制转换为列表或字典 # sorted()函数:对序列进行排序,返回一个排序后的新列表,原数据不改变 # ...
- python中operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. k = [,,] b = ) print(b(k)) #输 ...
- python中operator.itemgetter
直接上例子: rs= [... {... "datetime": "Mon, 31 Aug 2015 23:00:00 GMT",... ...
- reversed()函数和sorted()函数
#reversed()反转排序,可对列表.元组.区间等进行排序 #练习1 a = range(10) a_list = [x for x in reversed(a)] print(a_list) # ...
- Python中的sorted函数以及operator.itemgetter函数 【转载】
operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...
- Python中的sorted函数以及operator.itemgetter函数
operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...
- Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块
Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函 ...
随机推荐
- android Material design是什么
Material design概述: Material design是一套UI样式标准,应该会提供一些新的API这写API包含了以下五大模块内容,分别是: Material Theme New Wid ...
- 【matlab】View视点函数
view(az,el) view(az,el);或view([az el]);均可.
- python greenlet背景介绍与实现机制
并发处理的技术背景 并行化处理目前很受重视, 因为在很多时候,并行计算能大大的提高系统吞吐量,尤其在现在多核多处理器的时代, 所以像lisp这种古老的语言又被人们重新拿了起来, 函数式编程也越来越流行 ...
- PHP 获得域控内用户的计算机登录名
一个需求: 在域控范围获得访问用户的计算机名.方法: 1.测试软件环境: XAMPP Control Panel V3.2.1 , Apache version 2.4.7 2.Apache 2.2 ...
- 一个jsp页面引入另一个jsp页面的三种方式 及静态引入和动态引入的区别
转载下, 转载自:http://blog.csdn.net/fn_2015/article/details/70311495 1.第一种:jstl import <c:import url=& ...
- diff工具
Beyond Compare 4 可以diff文件夹.单个文件.
- Python3.6全栈开发实例[002]
2.判断用户传入的对象(字符串.列表.元组)长度是否大于5. li = [11,22,33,44,55,66,77,88,99,000,111,222] def func2(lst): if len( ...
- Jmeter关联技术
JMeter:关联步骤 <1>录制成功,回放失败了: <2>录制两个业务相同的脚本,比对差别,找到动态数据,AptDiff_1.6.zip工具 <3>找到相应请求: ...
- win7与win server 2008防火墙设置
转自:http://blog.51cto.com/jimshu/590411 Windows 防火墙通过阻止未授权用户通过 Internet 或网络访问您的计算机来帮助保护计算机. Windows 2 ...
- 安卓3d引擎
很 多初学Android游戏开发 href="http://edu.gamfe.com/gamedev.html">游戏开发的朋友,往往会显得有些无所适从.他们经常不知道该从 ...