在python中枚举

时间:2010-10-31 08:53:21

标签: python

说,

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)

2 个答案:

答案 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]):
    ...