从机器学习学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

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-01-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【编程基础】C++引用简单介绍

对于习惯使用C进行开发的朋友们,在看到c++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中它却有着不同的用途,掌握C++的&...

3098
来自专栏Spark学习技巧

scala中常用但其他语言不常见的符号含义 - 心灵空谷幽兰 - 博客园

本文旨在介绍Scala在其他语言中不太常见的符号含义,帮助理解Scala Code。 随着我对Scala学习的深入,我会不断增加该篇博文的内容。 修改记录 -...

1856
来自专栏人人都是极客

gcc内嵌汇编详解

有时候我们希望在C/C++代码中使用嵌入式汇编,因为C中没有对应的函数或语法可用。比如我最近在ARM上写FIR程序时,需要对最后的结果进行饱和处理,但gcc没有...

1032
来自专栏Vamei实验室

Python进阶07 函数对象

秉承着一切皆对象的理念,我们再次回头来看函数(function)。函数也是一个对象,具有属性(可以使用dir()查询)。作为对象,它还可以赋值给其它对象名,或者...

2176
来自专栏机器学习算法与Python学习

Python: numpy总结(2)

11、xrange 例子: for i in xrange(3): print i test=[1,2,3,4] print test...

3135
来自专栏软件开发 -- 分享 互助 成长

C++ STL之查找算法

C++STL有好几种查找算法,但是他们的用法上有很多共同的地方: 1、除了binary_search的返回值是bool之外(查找的了返回true,否则返回fal...

1906
来自专栏阮一峰的网络日志

Javascript的this用法

this是Javascript语言的一个关键字。 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,   function test(){ ...

26510
来自专栏coding for love

ES6常用新特性学习3-解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。它提供了一种更加方便的数据访问方法,对于代码简化有很...

672
来自专栏『不羁阁』行走的少年专栏

OC知识--类方法、对象方法介绍及区别

1143
来自专栏性能与架构

mysql explain分析说明

explain是sql优化时的重要工具 使用方法 在要分析的sql语句签名添加 explain ,例如 explain select * from user;...

3254

扫码关注云+社区