gpt4 book ai didi

Python 列表理解不适用于 itertools.groupby 解码

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

我正在尝试将 itertools.groupby 的结果解码为值列表。

我的来源是:

x = [(1, 2), (2, 1), (6, 3), (6, 5), (1, 3)]

原来的方法是用这样的for语句来实现:

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

我选择使用列表理解将其放在一行中:

[(k, list(g)) for k, g in list(itertools.groupby(x, keyfunc))]

第一种方法的结果是:

[1, 2, 6] #for uniquekeys
[[(1, 2), (1, 3)], [(2, 1)], [(6, 3), (6, 5)]] #for groups

这完全有道理。

第二种方法的结果是:

[(1, []), (2, []), (6, [(6, 5)])]

我们可以看到这些组要么是空的,要么是包含单个整数的。

哪里出了问题?

最佳答案

问题出在 list(itertools.groupby(x, keyfunc)) 中的列表。只要放下它,它就应该可以工作。

在您的示例中,list(itertools...) 有四个迭代器,它们都共享相同的底层迭代器。通过构造列表,您有效地耗尽了前三个迭代器来创建第四个迭代器,从而呈现整个东西都无法使用。通过删除显式列表,您可以从一个迭代器走到另一个迭代器。

关于Python 列表理解不适用于 itertools.groupby 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43454953/

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