groupby()
将key函数作用于原循环器的各个元素。根据key函数结果,将拥有相同函数结果的元素分到一个新的循环器。每个新的循环器以函数返回结果为标签。
这就好像一群人的身高作为循环器。我们可以使用这样一个key函数:如果身高大于180,返回"tall";如果身高底于160,返回"short";中间的返回"middle"。最终,所有身高将分为三个循环器,即"tall", "short", "middle"。
from itertools import *def height_class(h):
ifh>180:
return 'tall'
elifh<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):
printm
printlist(n)
结果:
middle
[165, 170, 177]
short
[158, 159]
tall
[191, 181, 182, 190]
注意,groupby的功能类似于UNIX中的uniq命令。分组之前需要使用sorted()对原循环器的元素,根据key函数进行排序,让同组元素先在位置上靠拢。
http://www.cnblogs.com/vamei/p/3174796.html