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

筛选ABO3型化合物A/B位氧化态和为6的Python代码重构

ABO3型化合物氧化态匹配筛选实现

实现逻辑

  • 基于mendeleev库拉取各元素的全部氧化态,提前过滤负价氧化态(ABO3型结构中A、B位均为正价,负价态不可能满足电荷平衡要求)
  • 逐一遍历输入的化合物列表,枚举A、B位氧化态的所有组合,筛选满足A_OS + B_OS = 6(即整体电荷平衡:A_OS + B_OS + 3*(-2) = 0)的配对
  • 对存在合法氧化态配对的化合物,仅保留符合要求的氧化态值,丢弃其余无效氧化态;无合法配对的化合物直接从结果中移除

完整实现代码

from mendeleev import Element

# 输入的ABO3化合物二维列表
compound_list = [['Ba', 'Si', 'O'], ['Ca', 'Mn', 'O'], ['Ca', 'Fe', 'O']]

def get_positive_oxidation_states(element_symbol: str) -> list[int]:
    """获取指定元素的所有正氧化态"""
    ele = Element(element_symbol)
    return [os for os in ele.oxidation_states if os > 0]

valid_result = []
for compound in compound_list:
    a_site, b_site, _ = compound
    a_all_os = get_positive_oxidation_states(a_site)
    b_all_os = get_positive_oxidation_states(b_site)
    
    # 收集符合加和为6的氧化态
    matched_a_os = []
    matched_b_os = []
    for a_os in a_all_os:
        for b_os in b_all_os:
            if a_os + b_os == 6:
                if a_os not in matched_a_os:
                    matched_a_os.append(a_os)
                if b_os not in matched_b_os:
                    matched_b_os.append(b_os)
    
    # 仅保留存在合法配对的化合物
    if matched_a_os and matched_b_os:
        valid_result.append({
            "formula_unit": compound,
            "A_site_os": matched_a_os,
            "B_site_os": matched_b_os
        })

# 输出结果
for res in valid_result:
    print(f"化合物{res['formula_unit']} 对应A位氧化态{res['A_site_os']},B位氧化态{res['B_site_os']}")

运行结果

化合物['Ba', 'Si', 'O'] 对应A位氧化态[2],B位氧化态[4]
化合物['Ca', 'Mn', 'O'] 对应A位氧化态[2],B位氧化态[4]

结果说明:['Ca', 'Fe', 'O']无符合要求的氧化态组合(Ca仅为+2价,Fe正价为+2、+3,加和分别为4、5,均不满足等于6的要求),已被自动剔除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:31:07