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

如何读取含化学元素符号与原子量的文件并按原子量排序

如何读取含化学元素符号与原子量的文件并按原子量排序

嘿,我明白你的问题啦——分开存两个列表确实会遇到排序后对应关系混乱的麻烦,这是因为两个列表是独立的,排序其中一个时,另一个的顺序不会同步变化,最后符号和原子量就对不上了。我来给你几个实用的解决思路和改进后的代码:

核心思路:把符号和原子量绑定在一起

与其用两个单独的列表存储,不如把每一行的元素符号和原子量打包成元组(或者字典),放到同一个列表里。这样排序的时候,两者的对应关系会一直保持,不会打乱。

改进后的代码示例

方法1:用元组存储并排序

这个方法会把原子量转成浮点数(因为读取的是字符串,直接排序会按字符顺序,不是数值大小),然后按原子量升序排列:

def get_sorted_elements():
    # 用with语句打开文件,自动处理关闭,更安全
    with open('atomer2.txt', 'r') as atomic_file:
        elements = []
        for line in atomic_file:
            # 跳过空行(如果文件里有的话)
            stripped_line = line.strip()
            if not stripped_line:
                continue
            # 分割每行的符号和原子量字符串
            symbol, weight_str = stripped_line.split()
            # 把原子量转成浮点数,确保按数值排序
            weight = float(weight_str)
            # 将(原子量,符号)作为元组加入列表,方便后续排序
            elements.append( (weight, symbol) )
    
    # 对列表排序,默认会按元组的第一个元素(原子量)升序排列
    elements.sort()
    
    # 如果需要转换成(符号,原子量)的格式,做个简单转换
    sorted_elements = [ (symbol, weight) for weight, symbol in elements ]
    return sorted_elements

方法2:用字典存储(可选)

如果你更习惯用字典的键值对形式,也可以把每个元素存成字典,然后用key参数指定排序依据:

def get_sorted_elements():
    elements = []
    with open('atomer2.txt', 'r') as atomic_file:
        for line in atomic_file:
            stripped_line = line.strip()
            if not stripped_line:
                continue
            symbol, weight_str = stripped_line.split()
            weight = float(weight_str)
            elements.append( {'symbol': symbol, 'weight': weight} )
    
    # 按原子量升序排序,key参数指定取字典里的'weight'值作为排序依据
    elements.sort(key=lambda x: x['weight'])
    return elements

为什么你原来的方法行不通?

你原来的代码里有两个问题:

  1. 拼写错误:wight_list.sort应该是weight_list.sort()(注意是weight不是wight,而且sort是方法要加括号)
  2. 本质问题:就算修正了拼写,排序weight_list后,symbol_list的顺序还是原来的,导致符号和原子量的对应关系完全错乱。比如原来第一个元素是Ac(227.0),排序后weight_list里最小的是氢的原子量,但symbol_list第一个还是Ac,这就完全不对了。

调用示例

当你调用这个函数后,会得到一个按原子量从小到大排列的列表,比如:

sorted_atoms = get_sorted_elements()
for sym, w in sorted_atoms:
    print(f"{sym} {w}")

输出会是氢在前,然后是氦,接着按原子量依次排列的元素。

备注:内容来源于stack exchange,提问作者tryhhaaards

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:05:28