itertools.groupby返回错误的结果(这不是关于排序)

时间:2015-07-03 01:18:00

标签: python python-2.7 iterator itertools

我想将字符串分解为单词,但保留索引所在的单词。例如,我想将'aaa bbb ccc'转换为[(0, 'aaa'), (4, 'bbb'), (8, 'ccc')]这只是背景,而不是问题

问题在于我尝试将itertools.groupbystr.isalpha作为关键,但它给了我奇怪的结果。

此代码显示了我正在谈论的内容(请忽略list无处不在。我只是想确定我处理的是iterables,而不是迭代器):

from itertools import groupby

text = 'aaa bbb ccc'

chars = list(groupby(list(enumerate(text)), lambda x: x[1].isalpha()))

result = [list(v) for k, v in chars if k] 

print result
assert result == [
        [(0, 'a'), (1, 'a'), (2, 'a')],
        [(4, 'b'), (5, 'b'), (6, 'b')],
        [(8, 'c'), (9, 'c'), (10, 'c')]]

变量result最终为[[(10, 'c')], [], []],我不知道为什么。也许我在这里错过了一些非常简单的东西,但我看不到它。

1 个答案:

答案 0 :(得分:0)

更正代码:

chars = groupby(l, lambda x: x[1].isalpha())
result = [list(v) for k, v in chars if k]

找出奇怪的输出

>>> l = list(enumerate(text))

>>> chars = groupby(l, lambda x: x[1].isalpha())

>>> list(chars.next()[1])
[(0, 'a'), (1, 'a'), (2, 'a')]

>>> for k,v in list(chars): print list(v)
[]
[(10, 'c')]
[]
[]

list将对groupby

中的子迭代器生效