Python itertools.groupby长度键?

时间:2017-07-04 04:44:03

标签: python

使用python 3.6

有没有办法将groupby生成器的长度作为其键返回?

所以这个:

from itertools import groupby

x = [1,1,1,1,1,
     2,2,2,2,
     3,3,3,
     4,4,
     5]

for key, group in groupby(x): # Some lambda function here?
    print(key,'|', group)

会输出:

5 | <itertools._grouper object at 0x0000016D0FFD45C0>
4 | <itertools._grouper object at 0x0000016D0FFD4668>
3 | <itertools._grouper object at 0x0000016D0FFD4400>
2 | <itertools._grouper object at 0x0000016D0FFD45C0>
1 | <itertools._grouper object at 0x0000016D0FFD4668>

干杯。

2 个答案:

答案 0 :(得分:1)

如果你不介意将生成器加载到列表中,你可以这样做并检查它们的长度

for key, group in groupby(x):
    l = list(group)
    print(len(l))
    do_something_else_with_list(l)

如果你想要检查groupby本身的长度,你可以这样做:

groupby_list = list(groupby(x))
print(len(groupby_list))

请注意,一旦您将生成器转换为列表,生成器本身就不能再次迭代,您应该只使用列表(或重新创建生成器)

答案 1 :(得分:1)

不,那是不可能的。但您总是可以将组转换为列表并打印其长度:

for key, group in groupby(x): 
    sub_list = list(group)
    print(len(sub_list),'|', sub_list)

输出:

5 | [1, 1, 1, 1, 1]
4 | [2, 2, 2, 2]
3 | [3, 3, 3]
2 | [4, 4]
1 | [5]