【发布时间】:2016-03-30 14:39:41
【问题描述】:
Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> s="aaabbc"
>>> import itertools
>>> gs=itertools.groupby(s)
>>> for key, group in gs:
... print(key, group)
... print(list(group))
... print(key, group, list(group))
...
a <itertools._grouper object at 0x7fd246da3278>
['a', 'a', 'a']
a <itertools._grouper object at 0x7fd246da3278> []
b <itertools._grouper object at 0x7fd246da32e8>
['b', 'b']
b <itertools._grouper object at 0x7fd246da32e8> []
c <itertools._grouper object at 0x7fd246da39b0>
['c']
c <itertools._grouper object at 0x7fd246da39b0> []
正如代码所示,上面的 for 循环中有一些惊人的东西:在一次迭代中,key 和 itertools._groupre 对象没有改变,但是 list(group) 的结果发生了变化。确切地说,第二个列表(群) 没有。我只是不知道为什么。为什么? (我的英文不太好,希望你能明白我问的)
【问题讨论】:
-
生成器只能生成它们的值一次。你没有得到
None,你得到一个空列表,因为group生成器已被第一个list()调用耗尽。
标签: python list python-3.x iteration