python itertools.tee - 为什么我的副本会这样?

问题描述 投票:0回答:1

我有以下代码。

# create an iterator
result = itertools.groupby(people, key=get_job)

# create copies
copy1, copy2, copy3, copy4, copy5 = itertools.tee(result, 5)

# run first copy
for key, group in copy1:
    print(key, list(group))

# run second copy
for key, group in copy2:
    print(key, list(group))

得到的结果是:

hacker [list here as expected]
banker [list here as expected]
trader [list here as expected]

hacker []
banker []
trader []

所以第二个迭代器失败了

我知道在 python 中,你只能对一个迭代器进行一次迭代,但复制的重点不就是 正是为了解决这个问题? 即我希望每一个拷贝都有自己的生命,并且能够迭代它,不管我是否迭代过其他的。

要么是我的代码有问题,要么是我误解了复制的目的。

python iterator itertools
1个回答
0
投票

经过许多小时的研究,我可以确认上面的@jasonharper是正确的--你不能像.groupby那样用itertools.tee嵌套迭代器。

相反,我在这里找到了一个可行的解决方案。Python itertools.groupby的多个值

从那里复制粘贴,省得这次看书的人。

totalResults = [] 
totalClasses = []           
for key, location in groupby(rows, lambda k: k[0]):
    location = list(location)
    totalResults.append(dict(name=key, data=[x[2] for x in location]))
    totalClasses.append(dict(name=key, data=[x[3] for x in location]))

在此向作者(@John La Rooy)点赞。

© www.soinside.com 2019 - 2024. All rights reserved.