gpt4 book ai didi

python - 遍历生成器和转换为列表之间的区别

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:23 24 4
gpt4 key购买 nike

我本以为这两段代码会产生相同的结果

from itertools import groupby

for i in list(groupby('aaaabb')):
print i[0], list(i[1])

for i, j in groupby('aaaabb'):
print i, list(j)

在一个中,我将 groupby 返回的迭代器转换为一个列表并对其进行迭代,在另一个中,我直接迭代返回的迭代器。

这个脚本的输出是

a []
b ['b']


a ['a', 'a', 'a', 'a']
b ['b', 'b']

为什么会这样?

编辑:作为引用,groupby('aabbaa')的结果看起来像

('a', <itertools._grouper object at 0x10c1324d0>)
('b', <itertools._grouper object at 0x10c132250>)

最佳答案

这是 groupby 函数的一个怪癖,大概是为了性能。

来自itertools.groupby documentation :

The returned group is itself an iterator that shares the underlying iterable with groupby(). Because the source is shared, when the groupby() object is advanced, the previous group is no longer visible. So, if that data is needed later, it should be stored as a list:

groups = []
uniquekeys = []
data = sorted(data, key=keyfunc)
for k, g in groupby(data, keyfunc):
groups.append(list(g)) # Store group iterator as a list
uniquekeys.append(k)

所以,你可以这样做:

for i in [x, list(y) for x, y in groupby('aabbaa')]:
print i[0], i[1]

关于python - 遍历生成器和转换为列表之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33791191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com