python - 遍历列表时使索引超出范围
问题描述
我写了一个完美运行的机器学习算法,现在我必须迭代列表中的所有项目以生成 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])
在这里,我试图检查列表中的所有其他项目是否有任何项目相似,然后从列表中删除该项目,因为再次检查句子与其他元素的相似性没有任何好处,这将浪费计算能力。但是当我试图弹出元素时,我得到了索引错误。
<ipython-input-12-c1959947bdd1> in <module>
4 length = len(temp)
5 for start_node in range(length):
----> 6 doc1 = nlp(temp[start_node])
7 for end_node in range(++start_node, length):
8 doc2 = nlp(temp[end_node])
我只是想保留原始句子,删除列表中所有相似的句子,这样它就不会检查这些项目。
临时列表有 351 项,这里我只是作为列表引用。
在这里;对其进行测试
print(temp[:1])
['malicious: caliche development partners "financial statement"has been shared with you']
我尝试创建另一个重复列表并从该列表中删除类似项目
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])
但是,当我从另一个列表中删除我什至没有迭代的元素时,仍然使相同的列表索引超出范围。
解决方案
我想你的问题出在这里。
temp.remove(temp[end_node])
您将删除列表中的项目temp
,因此列表索引将超出范围。
假设开始temp
包含 351 个项目,即索引 0 到 350。
现在,脚本将删除temp
列表中的 1 个(或更多)项目。
突然temp
列表将有 350 个项目,即索引 0 到 349。
但是,脚本仍然使用临时原始长度 351 进行迭代。
因此,当脚本到达最后一次迭代索引 350(或更早,如果删除了多个项目)时,交互将尝试获取不再存在的列表索引。
doc1 = nlp(temp[350])
由于此时temp
列表索引为 0 到 349。
最好有一个额外的列表副本进行修改,而不是修改您迭代的列表。
如果您创建附加列表,请记住使用复制方法。
final_items = temp.copy()
由于常规分配将保留对temp
列表的引用。
Python 文档 - 复制()
推荐阅读
- gremlin - 如何在 Tinkerpop 中替换、合并或插入新边
- algorithm - 任务队列并发
- javascript - 按钮禁用在表单内不起作用
- spring - spring-boot 双向关系或多重查询
- c# - 如何将 OneNote 的页面导出为 html 文件或文本?
- python - 元组比列表快是因为它们是可散列的吗?
- android - 如何减少统一的android游戏大小?
- reactjs - 如何进行此短路评估?
- python - Scikit Learn 中的 MinMaxScaler 似乎返回的缩放值不属于“feature_range”参数指定的值范围
- angularjs - 检查标记是否在圆半径AngularJS内