说,
term='asdf'; InvertedIndex = {}; InvertedIndex[term] = [1,2,2,2,4,5,6,6,6,6,7]
。
现在我们有了这个没有的功能。任何项目的出现。这是我遇到问题的功能。
def TF(term, doc):
idx = InvertedIndex[term].index(doc)
return next(i for i, item in enumerate(InvertedIndex[term][idx:])
if item != doc)
TF(term, 1)
为1,TF(term, 2)
为3,TF(term, 4)
为1。好到目前为止。
但它为TF(term, 7)
提供了 StopIteration 错误。如果我有InvertedIndex[term] = [7]
并且调用了TF(term, 7)
,它也会出现同样的错误。如何解决?
修改 关于功能目标的澄清。该功能应该算不了。一件物品的出现。考虑使用的示例TF(term,2)必须返回3,因为它在InvertedIndex [term]中出现了3次
解决方案:
def TF(term, doc):
return InvertedIndex[term].count(doc)
答案 0 :(得分:3)
我觉得我在另一个答案上写了那个循环但是你想要做的正确答案是InvertedIndex[term].count(doc)
这将计算列表中出现doc
的次数。
答案 1 :(得分:2)
在语言层面,你的问题是你在一个序列上调用'next',当序列为空时它会引发StopIteration。
否则,目前还不清楚如何帮助你,因为你写的这个函数应该做什么并不明显。你可能想要这样的东西:
def uniq_docs(inverted_index):
last = None
for i, doc in enumerate(inverted_index):
if doc != last:
yield i, doc
last = doc
并且您当前正在调用TF,请使用以下内容:
for index, doc in uniq_docs(InvertedIndex[term]):
...