You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python for循环迭代如何存储全部结果?为何仅保留初始值或最后值?

问题根因及修复方案

错误点1:成员判断逻辑失效

set0为Pandas DataFrame的情况下,set0[0]属于Series类型,Python的in操作符默认校验值是否存在于Series的索引,而非Series存储的元素值。如果你的word没有被设为索引,该判断永远返回False,所有迭代都会走else分支,prob0始终等于初始值math.log(c0)。

错误点2:非数值类型累加导致引用异常

即使判断条件偶然命中,set0[set0[0] == word]['prob']返回的是Series对象而非单个标量值,累加操作会保留Series的索引关联,最终所有存入列表的prob0都会被最后一次迭代的结果覆盖。

修复后代码

import math
result_negative = []
# 提前生成词集合和词-概率映射字典,避免循环内重复扫描DataFrame
word_set = set(set0[0].values)
word_prob_map = dict(zip(set0[0].values, set0['prob'].values))
log_c0 = math.log(c0)

for i in result_te:
    prob0 = log_c0
    for word in i:
        if word in word_set:
            prob0 += math.log(word_prob_map[word])
        # math.log(1)等于0,无需额外执行加法操作
    
    result_negative.append((' '.join(i), prob0))

优化说明

  • 提前生成集合和映射字典,避免每次循环都对DataFrame做全量扫描和筛选,运行效率提升明显
  • 直接取标量值做累加,不存在引用覆盖问题,结果存储完全正常

内容的提问来源于stack exchange,提问作者user14261785

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:57:04