Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表索引超出范围循环Python_Python_Loops - Fatal编程技术网

列表索引超出范围循环Python

列表索引超出范围循环Python,python,loops,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

我正在运行一个循环(更像是一个迭代过程),目的是计算一对文本文件的余弦相似性,一个包含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 
毫不奇怪,我的代码给了我以下错误:
列表索引超出范围
。当
i=len(data)
时,有没有办法告诉循环停止

我刚刚循环到
len(data)-1
。你知道这会带来什么变化吗


顺便说一下,我不同意用这么多函数填充
globals()
。其中有84个。除非您没有将它们用于pythonshell(用于快速工作),否则我不建议您尝试这种方法。

您确实告诉了循环停止,但是
数据[I+1]
才是故障所在。也许您想要
range(len(data)-1)
。不要毫无理由地使用
globals()
。假设你没有伟大的理由,除非你能解释为什么你的理由是伟大的。
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