写这篇文章的目的是之前在《机器学习实战》用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函数的更多相关文章

  1. python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函数

    Python 中有非常方便高效的排序函数,下面主要介绍如何sort/sorted对list,dict进行排序. 1. 用list.sort /sorted 对list of tuples中第二个值进行 ...

  2. python的operator.itemgetter('click')用于定义获取'click'项的函数

    python的排序参见文章http://blog.csdn.net/longshenlmj/article/details/12747195 这里介绍 import operator模块 operat ...

  3. python之zip函数和sorted函数

    # zip()函数和sorted()函数 # zip()函数:将两个序列合并,返回zip对象,可强制转换为列表或字典 # sorted()函数:对序列进行排序,返回一个排序后的新列表,原数据不改变 # ...

  4. python中operator.itemgetter函数

    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. k = [,,] b = ) print(b(k)) #输 ...

  5. python中operator.itemgetter

    直接上例子: rs=  [...     {...       "datetime": "Mon, 31 Aug 2015 23:00:00 GMT",...  ...

  6. reversed()函数和sorted()函数

    #reversed()反转排序,可对列表.元组.区间等进行排序 #练习1 a = range(10) a_list = [x for x in reversed(a)] print(a_list) # ...

  7. Python中的sorted函数以及operator.itemgetter函数 【转载】

    operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...

  8. Python中的sorted函数以及operator.itemgetter函数

    operator.itemgetter函数operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2 ...

  9. Python第十一天 异常处理 glob模块和shlex模块 打开外部程序和subprocess模块 subprocess类 Pipe管道 operator模块 sorted函数 os模块 hashlib模块 platform模块 csv模块

    Python第十一天    异常处理  glob模块和shlex模块    打开外部程序和subprocess模块  subprocess类  Pipe管道  operator模块   sorted函 ...

随机推荐

  1. ASP.NET动态网站制作(27)-- 三层框架(1)

    前言:今天主要介绍一下三层框架,给大家一个整体的概念.分层概念使得程序低耦合,更加健壮,扩展性更好. 内容: 1.三层: UI(表现层):主要是指与用户交互的界面.用于接收用户输入的数据和显示处理后用 ...

  2. 服务器之ipmitool

    一般命令 raw #发送一个原始的IPMI请求,并且打印回复信息. Lan #配置网络(lan)信道(channel) chassis #查看底盘的状态和设置电源 event #向BMC发送一个已经定 ...

  3. uva 12730(期望经典)

    选自: http://blog.csdn.net/myhelperisme/article/details/39724515 用dp(n)表示有n个位置时的期望值,那么,对于一个刚进来的人来说,他有 ...

  4. 32位Win7下安装与配置PHP环境(一)

    运行PHP网站,主要需要安装.配置三个软件,Apache.PHP和MySQL.如果需要编辑调试PHP程序,还要安装一个编辑调试软件. 一. Apache Apache是和IIS类似的一个软件,是运行在 ...

  5. Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式

    Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式 主题 概念 Hibernate 延迟加载的代理模式 Spring AOP的代理模式 区别和联系 静态代理和动态代理 概念 代 ...

  6. Object.defineProperties()

    w https://docs.microsoft.com/en-us/scripting/javascript/reference/object-defineproperty-function-jav ...

  7. ztree的异步加载

    js中代码为: //参数设置: var setting = { async: { enable: true,    url:"<%=path%>/role/getTreeData ...

  8. linux下查看cpu,内存,硬盘等硬件信息的方法

    说明:Linux下可以在/proc/cpuinfo中看到每个cpu的详细信息.但是对于双核的cpu,在cpuinfo中会看到两个cpu.常常会让人误以为是两个单核的cpu. 一.linux CPU大小 ...

  9. MySQL第二天

    回顾 数据库基础知识: 关系型数据库(磁盘)和非关系型数据库(内存)     关系型数据库: 建立在关系模型上的数据库 数据结构: 二维表(比较浪费空间) 操作数据的指令集合: SQL(DDL,DML ...

  10. PCL+Qt+VS可视化点云

    前言 Point Cloud Library (PCL)是一个功能强大的开源C++库,假设可以使用好PCL将会对我们在LiDAR数据处理领域的研究产生巨大帮助.LiDAR技术经过几十年的发展.眼下国内 ...