gpt4 book ai didi

python - 生成器不是迭代器?

转载 作者:IT老高 更新时间:2023-10-28 20:54:44 25 4
gpt4 key购买 nike

我有一个生成器(一个产生东西的函数),但是当试图将它传递给 gensim.Word2Vec 时,我收到以下错误:

TypeError: You can't pass a generator as the sentences argument. Try an iterator.

生成器不是一种迭代器吗?如果没有,我如何从中制作迭代器?

查看库代码,它似乎只是迭代了 for x in enumerate(sentences) 之类的句子,这与我的生成器配合得很好。那么是什么导致了错误呢?

最佳答案

生成器在一个循环之后用尽。 Word2vec 只需要多次遍历句子(并且可能获取给定索引的项目,这对于只是一种只能弹出的堆栈的生成器是不可能的),因此需要更可靠的东西,例如列表。

特别是在他们的代码中,他们调用了两个不同的函数,都迭代句子(因此,如果你使用生成器,第二个将在空集上运行)

self.build_vocab(sentences, trim_rule=trim_rule)
self.train(sentences)

它应该适用于任何实现 __iter__ 而不是 GeneratorType 的东西。所以将你的函数包装在一个可迭代的接口(interface)中,并确保你可以多次遍历它,这意味着

sentences = your_code
for s in sentences:
print s
for s in sentences:
print s

两次打印您的收藏

关于python - 生成器不是迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34166369/

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