Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python itertools.groupby返回错误的结果(这与排序无关)_Python_Python 2.7_Iterator_Itertools - Fatal编程技术网

Python itertools.groupby返回错误的结果(这与排序无关)

Python itertools.groupby返回错误的结果(这与排序无关),python,python-2.7,iterator,itertools,Python,Python 2.7,Iterator,Itertools,我想把一个字符串分解成单词,但保留单词起始的索引。例如,我想将'aaa-bbb-ccc'转换为[(0,'aaa'),(4,'bbb'),(8,'ccc')]。这只是背景,不是问题 问题是,我试图使用itertools.groupby和str.isalpha作为键,但它给了我奇怪的结果 这段代码显示了我所说的内容(请忽略列表中的所有内容。我只是想确定我处理的是iterables,而不是迭代器): 变量result的结果是[[(10,'c')],[],[]],我不知道为什么。也许我在这里遗漏了一些非

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

问题是,我试图使用
itertools.groupby
str.isalpha
作为键,但它给了我奇怪的结果

这段代码显示了我所说的内容(请忽略
列表
中的所有内容。我只是想确定我处理的是iterables,而不是迭代器):

变量
result
的结果是
[[(10,'c')],[],[]]
,我不知道为什么。也许我在这里遗漏了一些非常简单的东西,但我就是看不到。

更正代码:

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

中的子迭代器生效更正代码:

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

中的子迭代器生效。您可以执行
print
每一步来确定这一点,因为
itertools.groupby
创建的对象在打印时不会显示太多信息。这将只是一系列的行
。不要在chars上执行
list()
。是的,这很简单。请,@LittleQ,把它作为一个答案写下来,这样我就可以接受。你可以做
print
每一步来弄清楚这没有多大帮助,因为
itertools.groupby
创建的对象在打印时不会显示太多信息。这将只是一系列的行
。不要在chars上执行
list()
。是的,这很简单。请,@LittleQ,把它写下来作为回答,这样我就可以接受了。