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

Python遍历嵌套列表计算化学分子式各元素质量百分比

修复方案

根因说明

仅输出最后一个元素质量占比的问题,核心原因是原有compute_mass_percentage函数在遍历嵌套列表时,要么没有累加各元素质量、每次循环直接覆盖结果变量,要么没有统计总摩尔质量,仅保留了最后一次循环的计算值。

可直接使用的修复代码

1. 重写compute_mass_percentage函数

该实现支持任意深度的嵌套列表、任意数量的元素,自动统计各元素总质量和总摩尔质量后计算占比:

def compute_mass_percentage(parsed_formula, periodic_table):
    # 存储各元素总质量、整个分子的总摩尔质量
    element_total_mass = {}
    molecule_total_mass = 0.0

    # 递归遍历嵌套的分子式解析结果
    def recursive_traverse(nested_item, global_multiplier=1):
        nonlocal molecule_total_mass
        for entry in nested_item:
            # 匹配单个元素条目:格式为[元素符号, 原子个数]
            if isinstance(entry[0], str):
                elem_symbol, atom_count = entry[0], entry[1]
                current_mass = periodic_table[elem_symbol] * atom_count * global_multiplier
                # 累加元素总质量
                if elem_symbol in element_total_mass:
                    element_total_mass[elem_symbol] += current_mass
                else:
                    element_total_mass[elem_symbol] = current_mass
                # 累加分子总质量
                molecule_total_mass += current_mass
            # 匹配嵌套的基团条目:格式为[基团解析列表, 基团重复次数]
            else:
                group_content, group_multiplier = entry[0], entry[1]
                recursive_traverse(group_content, global_multiplier * group_multiplier)
    
    recursive_traverse(parsed_formula)

    # 计算质量百分比,保留两位小数
    result = []
    for elem, mass in element_total_mass.items():
        percentage = round((mass / molecule_total_mass) * 100, 2)
        result.append((elem, percentage))
    return result

2. 调整main()函数中的调用逻辑

原有调用大概率是仅打印了返回结果的最后一项,修改为遍历所有结果输出即可:

# 只需替换原有的compute_mass_percentage调用和输出部分,变量名和你现有代码保持一致即可
mass_percentage_list = compute_mass_percentage(parsed_formula, periodic_table)
print("各元素质量占比:")
for elem, pct in mass_percentage_list:
    print(f"{elem}: {pct}%")

效果验证

修复后不管分子式解析后的嵌套层级多深、包含多少种元素,都能完整统计所有元素的质量占比,不会出现结果被覆盖的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:09:00