Python--itertools包--groupby使用(分类)

来源:互联网 发布:java windows api 编辑:程序博客网 时间:2024/05/29 02:39
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]


注意,groupby的功能类似于UNIX中的uniq命令。分组之前需要使用sorted()对原循环器的元素,根据key函数进行排序,让同组元素先在位置上靠拢。

转自:http://blog.csdn.net/propro1314/article/details/46740603

[python] view plain copy
  1. from itertools import groupby  
  2.   
  3. def compress(data):  
  4.     return ((name, len(list(group))) for name, group in groupby(data))  
  5.   
  6. def decompress(data):  
  7.     return (name * size for name, size in data)  
  8.   
  9. c = compress('get uuuuuuuuuuuuuuuuuuuuuuuup')  
  10. print(''.join(decompress(c)))  

 grouby函数类似Unix命令uniq,对相邻的重复元素进行分组。

groupby(iterable[, keyfunc]) -> create an iterator which returns (key, sub-iterator) grouped by each value of key(value).



原创粉丝点击