python itertool.groupby使用误点!

使用误点一:

误以为 groupby是按照key进行分组的:

例子

from random import choice
lst = [ Student(choice(['M','F']),choice(range(10,100))) for i in range(20)]
for k,items in itertools.groupby(lst,lambda x:x.sex):
    print k
    for x in items:
        print x
    print "-" * 20
</pre><p></p><p>输出结果:</p>FF:27F:44F:52--------------------MM:65--------------------FF:99--------------------MM:29--------------------FF:90F:20--------------------MM:63--------------------FF:93--------------------MM:53M:62M:74--------------------FF:59--------------------MM:50--------------------FF:42--------------------MM:82M:72--------------------FF:61F:86--------------------<p>从这里可以看出, groupby 的行为表现像uniq一样根据连续值来分组的,因此对想按照分组的key进行排序就可以达到原先的效果了</p><p></p><pre name="code" class="html">lst = sorted(lst,key=lambda x:x.sex)
for k,items in itertools.groupby(lst,lambda x:x.sex):
    print k
    for x in items:
        print x
    print "-" * 20

结果

F
F:27
F:44
F:52
F:99
F:90
F:20
F:93
F:59
F:42
F:61
F:86
--------------------
M
M:65
M:29
M:63
M:53
M:62
M:74
M:50
M:82
M:72
--------------------

参考:

https://docs.python.org/2/library/itertools.html?highlight=itertools#module-itertools

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值