【发布时间】:2016-09-12 01:02:38
【问题描述】:
我无法准确理解这个函数的作用,因为我猜是围绕它的使用的编程魔法?
在我看来,它返回了与迭代器配对的键列表(字符串中的唯一字母),它引用了原始字符串中每个字母的数量列表,但有时似乎不是案例。
例如:
import itertools
x = list(itertools.groupby("AAABBB"))
print x
哪个打印:
[('A', <itertools._grouper object at 0x101a0b050),
('B', <itertools._grouper object at 0x101a0b090)]
这似乎是正确的,我们将唯一键与迭代器配对。但是当我运行时:
print list(x[0][1])
我明白了:
[]
当我跑步时
for k, g in x:
print k + ' - ' + g
我明白了:
B - <itertools._grouper object at 0x1007eedd5>
它忽略第一个元素。这似乎违反直觉,因为如果我只是稍微改变一下语法:
[list(g) for k, g in itertools.groupby("AAABBB")]
我明白了:
[["A", "A", "A"], ["B", "B", "B"]]
这是正确的,并且与我认为这个函数应该做的一致。
但是,如果我再稍微改变一下语法:
[list(thing) for thing in [g for k, g in itertools.groupby(string)]]
我回来了:
[[], ['B']]
这两个列表推导应该直接等价,但它们返回不同的结果。
发生了什么事?非常感谢您的洞察力。
【问题讨论】:
-
只要您推进顶级迭代器,
group迭代器就会失效。
标签: python group-by list-comprehension itertools