列表索引超出范围循环Python

时间:2016-04-05 10:56:00

标签: python loops

我正在运行一个循环(更多是作为迭代过程),目的是计算一对文本文件的余弦相似度和一个包含84个文本文件的数据集。我遵循的逻辑是首先从文档0和1计算它,然后计算文档1和2直到文档n-1和n。我编码的方式如下:

my_funcs = {}
for i in range(len(data)):
    def foo(x, y):
        x = data[i]['body']
        y = data[i+1]['body']
        tfidf = vectorizer.fit_transform([x, y])
        return ((tfidf * tfidf.T).A)[0,1]


    foo.func_name = "cosine_sim%d" % i
    my_funcs["cosine_sim%d" % i] = foo

globals().update(my_funcs) # Export to namespace 

毫不奇怪,我的代码给了我以下错误:list index out of range。有没有办法告诉循环在i = len(data)时停止?

1 个答案:

答案 0 :(得分:1)

my_funcs = {}
for i in range(len(data)-1):
    def foo(x, y):
        x = data[i]['body']
        y = data[i+1]['body']
        tfidf = vectorizer.fit_transform([x, y])
        return ((tfidf * tfidf.T).A)[0,1]


    foo.func_name = "cosine_sim%d" % i
    my_funcs["cosine_sim%d" % i] = foo

globals().update(my_funcs) # Export to namespace 

我刚刚循环到len(data)-1。你意识到它做了什么改变吗?

顺便说一下,我并不同意用globals()来填充这么多功能。其中有84个。除非你没有使用它们进行Python Shell使用(为了快速工作),否则我不建议你试试这个。