从机器学习学python(二) ——iteritems、itemgetter、sorted、sort
从机器学习学python(二)——iteritems、itemgetter、sorted、sort
(原创内容,转载请注明来源,谢谢)
一、iteritems
这个方法由python的dict类型可以调用,dict.iteritems()是一个生成器(迭代器)的概念,类比php的generator,其只会返回当前结果,并且将变量指向dict的下一个元素的指针,可以在while、for语句中,通过next方法不断获取其下一个元素。
这种局部返回的方式,对于大数组的局部读取而言,速度较快,占用内存空间少。
类比:items
dict.items()返回的是一个完整的列表所有列表项。对于要频繁取其中多个值的时候,这样做在取值过程比较快。但是当元素很多时,会占用较多的内存。
二、operator.itemgetter
这个是python的operator模块,其中提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号。
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
示例如下:
a = [1,2,3]
>>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
三、sorted与sort
对List、Dict进行排序,Python提供了两个方法:sorted和sort。
1、sort
用List的成员函数sort进行排序,在本地进行排序,不返回副本。
L.sort(cmp=None,key=None, reverse=False) ,其中:cmp(x, y) -> -1, 0, 1,key可以用operator的itemgetter来进行操作,reverse表示结果是否反向排序。
例如:
(1)
L =[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f(x):
return len(x)
sort(key=f)
print L
输出:
[{1: 9}, {1: 5,3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]
(2)
L =[{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f2(a,b):
return a[1]-b[1]
L.sort(cmp=f2)
print L
2、sorted
sorted(iterable,cmp=None, key=None, reverse=False),后面三个参数同sort,第一个参数要求传入一个iterable类型的变量,即可以用next获取到下一个值的参数(例如iteritems)。
实例如下:
>>>students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),]
>>> sorted(students, key=lambda student : student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(students, cmp=lambda x,y : cmp(x[2], y[2])) #sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> from operator import itemgetter, attrgetter
>>> sorted(students, key=itemgetter(1,2)) # sort by grade then by age
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
——written by linhxx 2018.01.04
- Hyperledger - 超级账本项目:简介,安装,案例
- 我的第三个网页制作:b、i、s、u、sub、sup标签的使用
- 【AlphaGo Zero 核心技术-深度强化学习教程代码实战04】Agent类和SARSA算法实现
- 我的第二个网页制作:p,hn,br标签的使用
- 超级账本项目:架构设计
- 我的第四个网页制作:列表标签
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp
- 虎嗅主站盲打成功(已进后台)
- 我的第五个网页制作:pre、html转义、abbr标签的使用
- UVALive 3882 - And Then There Was One【约瑟夫问题】
- 超级账本项目:链码示例
- 我的第六个网页制作:table标签
- POJ 1163 The Triangle【dp+杨辉三角加强版(递归)】
- UVA 11039-Building designing【贪心+绝对值排序】 UVA11039-Building designing
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TCP三次握手和四次挥手以及11种状态
- 浙大版《C语言程序设计(第3版)》题目集 题8-9 分类统计各类字符个数
- 迭代加深搜索-POJ 3134 Power Calculus
- 浙大版《C语言程序设计(第3版)》题目集 习题9-2 计算两个复数之积
- 浙大版《C语言程序设计(第3版)》题目集 习题9-6 按等级统计学生成绩
- 实战|用pandas+PyQt5制作一款数据分组透视处理工具
- 带权/种类并查集-POJ 1182食物链
- 浙大版《C语言程序设计(第3版)》题目集 练习10-1 使用递归函数计算1到n之和
- 十分钟快速了解Pandas的常用操作!
- 一行代码如何隐藏 Linux 进程?
- SSH 只能用于远程 Linux 主机?那说明你见识太小了!
- 干货 | Trip.com 机票React Native整洁架构2.0实践
- 干货 | 日均TB级数据,携程支付统一日志框架
- 为什么 HTTPS 是安全的?
- Hello World背后的故事:如何在Linux上编译C语言程序