【发布时间】:2018-07-17 05:33:32
【问题描述】:
我试图使用 itertools.groupby 来帮助我按正或负属性对整数列表进行分组,例如:
输入
[1,2,3, -1,-2,-3, 1,2,3, -1,-2,-3]
将返回
[[1,2,3],[-1,-2,-3],[1,2,3],[-1,-2,-3]]
但是如果我:
import itertools
nums = [1,2,3, -1,-2,-3, 1,2,3, -1,-2,-3]
group_list = list(itertools.groupby(nums, key=lambda x: x>=0))
print(group_list)
for k, v in group_list:
print(list(v))
>>>
[]
[-3]
[]
[]
但如果我不list() groupby 对象,它会正常工作:
nums = [1,2,3, -1,-2,-3, 1,2,3, -1,-2,-3]
group_list = itertools.groupby(nums, key=lambda x: x>=0)
for k, v in group_list:
print(list(v))
>>>
[1, 2, 3]
[-1, -2, -3]
[1, 2, 3]
[-1, -2, -3]
我不明白的是,groupby对象是由一对key和_grouper对象组成的迭代器,groupby对象的list()调用不应该消耗_grouper对象吗?
即使它确实消耗了,我是如何从第二个元素中获得[-3] 的?
【问题讨论】:
-
只需使用列表理解:
groups = [list(g) for _, g in groupby(nums, lambda n: n >= 0)]. -
@ChristianDean 嘿,又是你!我知道我应该如何做正确,但我不明白为什么调用
list()会出错。 -
@Code_Control_jxie0755 是的,我经常在现场巡逻 :-)。看完下面的答案,你是否还在困惑?如果是,通过什么方式?
-
@ChristianDean 在阅读了附加的段落后,现在我明白了!
标签: python iterator grouping itertools