繁体   English   中英

在python中枚举

[英]enumerate in python

说,

term='asdf'; InvertedIndex = {}; InvertedIndex[term] = [1,2,2,2,4,5,6,6,6,6,7] 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)

它给1 TF(term, 1) ,3 TF(term, 2) ,1 TF(term, 4) 好到目前为止。

但它给TF(term, 7) StopIteration错误TF(term, 7) 如果我有InvertedIndex[term] = [7]并且称为TF(term, 7)它也会给出相同的错误。 怎么解决?

编辑:关于功能目标的澄清。 该功能应该算不了。 一件物品的出现。 考虑到使用的示例TF(term,2)必须返回3,因为它在InvertedIndex [term]中出现了3次

解:

def TF(term, doc):
    return InvertedIndex[term].count(doc)

我觉得我在另一个答案上写了那个循环,但你想要做的正确答案是InvertedIndex[term].count(doc)

这将计算doc在列表中出现的次数。

在语言层面,你的问题是你在一个序列上调用'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]):
    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM