使用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>
干杯。
答案 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]