从机器学习学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个域的值

2

>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第个的值

(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 =[,,,]

def f(x):

return len(x)

sort(key=f)

print L

输出:

[, , , ]

(2)

L =[,,,]

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

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180104B0APQK00?refer=cp_1026

扫码关注云+社区