Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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_Machine Learning_Nlp - Fatal编程技术网

Python 遍历列表时索引超出范围

Python 遍历列表时索引超出范围,python,machine-learning,nlp,Python,Machine Learning,Nlp,我写了一个机器学习算法,它工作得很好,现在我必须对列表中的所有项进行迭代,以生成一个0.01到1.00之间的相似性标记。这是密码 temp[] start_node = 0 end_node = 0 length = len(temp) for start_node in range(length): doc1 = nlp(temp[start_node]) for end_node in range(++start_nod

我写了一个机器学习算法,它工作得很好,现在我必须对列表中的所有项进行迭代,以生成一个0.01到1.00之间的相似性标记。这是密码

    temp[]
    start_node = 0
    end_node = 0
    length = len(temp)
    for start_node in range(length):
        doc1 = nlp(temp[start_node])
        for end_node in range(++start_node, length):
            doc2 = nlp(temp[end_node])
            similar = doc1.similarity(doc2)
            exp_value = float(0.85)
            if similar == 1.0:
                print("Exact match", similar, temp[end_node], "---------||---------",  temp[start_node])
            elif 0.96 < similar < 0.99:
                print("possible match", similar, temp[end_node], "---------||---------", temp[start_node])
                temp.remove(temp[end_node])
我尝试创建另一个重复列表,并从该列表中删除类似的项目

final_items = temp
start_node = 0
end_node = 0
length = len(temp)
for start_node in range(length):
    doc1 = nlp(temp[start_node])
    for end_node in range(++start_node, length):
        doc2 = nlp(temp[end_node])
        similar = doc1.similarity(doc2)
        exp_value = float(0.85)
        if similar == 1.0:
            print("Exact match", similar, temp[end_node], "---------||---------",  temp[start_node])
        elif 0.96 < similar < 0.99:
            print("possible match", similar, temp[end_node], "---------||---------", temp[start_node])
            final_items.remove(temp[end_node])
final_items=temp
开始节点=0
结束节点=0
长度=长度(温度)
对于范围内的起始节点(长度):
doc1=nlp(临时[启动节点])
对于范围内的结束节点(++开始节点,长度):
doc2=nlp(临时[结束节点])
相似性=doc1.相似性(doc2)
exp_值=浮动(0.85)
如果相似==1.0:
打印(“精确匹配”,类似,临时[end|U节点],“-----------||-----------”,临时[start|U节点])
elif 0.96<相似<0.99:
打印(“可能匹配”,类似,临时[end|U节点],“-----------||-----------”,临时[start|U节点])
最终项目。删除(临时[结束节点])

但是当我从另一个列表中删除元素时,仍然得到了超出范围的相同列表索引,而我甚至没有进行迭代。

我想你的问题就在这里

temp.remove(temp[end_node])
您将删除
temp
列表中的项目,因此列表索引将超出范围

比如说,从
temp
开始,包含351项,即索引0到350

现在,脚本将删除
temp
列表中的一个(或多个)项。
突然间,
temp
列表将有350个项目,即索引0到349

但是,脚本仍然使用临时原始长度351进行迭代。
因此,当脚本到达最后一个迭代索引350时(如果删除了几个项,则更早),迭代将尝试获取一个不再存在的列表索引

doc1 = nlp(temp[350])
因为此时
temp
列表索引为0到349

也许最好有一份列表的附加副本进行修改,而不是修改您迭代的列表。
如果创建其他列表,请记住使用复制方法

final_items = temp.copy()
因为常规作业将保留对
temp
列表的引用。

好的,
temp
在迭代时是空的。@Jan temp列表有351项,这里我只是作为列表引用。请在循环之前打印它,以确保它可能不包含您认为它包含的元素。@Jan我更新了结果列表,有351项检查成功完成了len(temp)有351个项目。是否有可能从列表中删除该项目,这样我们就不必再次重复使用同一项目,只保留原始项目。任何其他方式,因为我只想保留完全匹配的原始项,其余的是我想要删除的类似项,这样在迭代过程中它们就不会出现完全匹配。原因类似的项目在迭代中会与自身完全匹配。我尝试了上面的另一种可能的解决方案,但在我没有交互另一个列表时仍然出现索引错误。您必须使用copy方法创建新列表。否则,新列表将引用旧列表。即,更改新列表也将修改旧列表。
doc1 = nlp(temp[350])
final_items = temp.copy()