Python--itertools包--groupby使用(分类)
转自:http://www.cnblogs.com/vamei/p/3174796.html
groupby()
将key函数作用于原循环器的各个元素。根据key函数结果,将拥有相同函数结果的元素分到一个新的循环器。每个新的循环器以函数返回结果为标签。
这就好像一群人的身高作为循环器。我们可以使 用这样一个key函数: 如果身高大于180,返回"tall";如果身高底于160,返回"short";中间的返回"middle"。最终,所有身高将分为三个循环器, 即"tall", "short", "middle"。
from itertools import *
def height_class(h):
if h>180:
return 'tall'
elif h<160:
return 'short'
else:
return 'middle'
friends = [191, 158, 159, 165, 170, 177, 181, 182, 190]
friends = sorted(friends,key = height_class)
for m,n in groupby(friends,key = height_class):
print m
print list(n)
结果:
middle
[165, 170, 177]
short
[158, 159]
tall
[191, 181, 182, 190]
转自:http://www.cnblogs.com/vamei/p/3174796.html
groupby()
将key函数作用于原循环器的各个元素。根据key函数结果,将拥有相同函数结果的元素分到一个新的循环器。每个新的循环器以函数返回结果为标签。
这就好像一群人的身高作为循环器。我们可以使 用这样一个key函数: 如果身高大于180,返回"tall";如果身高底于160,返回"short";中间的返回"middle"。最终,所有身高将分为三个循环器, 即"tall", "short", "middle"。
from itertools import *
def height_class(h):
if h>180:
return 'tall'
elif h<160:
return 'short'
else:
return 'middle'
friends = [191, 158, 159, 165, 170, 177, 181, 182, 190]
friends = sorted(friends,key = height_class)
for m,n in groupby(friends,key = height_class):
print m
print list(n)
结果:
middle
[165, 170, 177]
short
[158, 159]
tall
[191, 181, 182, 190]
注意,groupby的功能类似于UNIX中的uniq命令。分组之前需要使用sorted()对原循环器的元素,根据key函数进行排序,让同组元素先在位置上靠拢。
转自:http://blog.csdn.net/propro1314/article/details/46740603
grouby函数类似Unix命令uniq,对相邻的重复元素进行分组。
groupby(iterable[, keyfunc]) -> create an iterator which returns (key, sub-iterator) grouped by each value of key(value).