python - 此 for 循环不会遍历列表中的所有元素
问题描述
我编写了一个小算法,使我能够根据单词的位置为单词分配权重,并检查它们在词典中的存在。脚本在元素列表中循环,然后为每个单词检索索引,如果在词典中找到该单词,则该单词的索引乘以 1,如果不是,则值为 0。毕竟单词的权重 I保存在字典中,它们的总和除以 elt 的 len。
到目前为止它有效,但我不明白为什么,循环停在一个元素上并且不涵盖整个词典。
这是一个示例:
lexiconpos =['beau','bel', 'gentil', 'bon', 'généreux']
lexiconneg =['gros', 'laid','méchant']
def find_nearest(texte, liste1, liste2):
d_neg = {}
d_pos = {}
d_0 = {}
sentences_weight =[]
for elt in texte:
print(elt)
for w in elt.split():
#print (w, ':')
pos = elt.split().index(w)
#print(pos)
if w in lexiconpos:
d_pos[w] = pos * 1
elif w in lexiconneg:
d_neg[w] = pos * 1
else:
d_0[w] = 0
mot_weight_pos = sum(d_pos.values()) / len(elt)
mot_weight_neg = sum(d_neg.values()) / len(elt)
print(d_neg)
print(d_pos)
print(d_0)
print(mot_weight_pos)
print(mot_weight_neg)
if mot_weight_pos > mot_weight_neg:
return elt, "pos"
else:
return elt, "neg"
a = ['tu être beau mais très méchant', 'ta gros tête est laid mais tu es bon et généreux']
find_nearest(a, lexiconpos, lexiconneg)
结果:不打印其他句子
tu être beau mais très méchant
{'méchant': 5}
{'beau': 2}
{'tu': 0, 'être': 0, 'mais': 0, 'très': 0}
0.06666666666666667
0.16666666666666666
('tu être beau mais très méchant', 'neg')
解决方案
您的 return 语句位于 for 循环内。函数执行在第一个遇到的 return 语句处终止。将返回语句拉出 for 循环。
推荐阅读
- python - 使用 Python 的 RSA 中的解密时间
- linux - 在 Arch Linux 上哪里可以得到 libGLU.so.1?
- reactjs - 如何在反应组件中使用 Dropzone
- arm - Function App Staging Slot Url 在末尾添加随机数
- python - 如何使用sqlparse解析sql语句
- javascript - 在同一页面上使用两次时 React DONUT 无法正常工作
- python - 如何使用序数分类器?
- c# - 如何在 C# 中将嵌套对象转换为对象
- python - xarray 自动完成触发计算
- python - 在 px.scatter 动画中同时使用 color_continuous_scale 和 color_discrete_sequence