如何读取含化学元素符号与原子量的文件并按原子量排序
如何读取含化学元素符号与原子量的文件并按原子量排序
嘿,我明白你的问题啦——分开存两个列表确实会遇到排序后对应关系混乱的麻烦,这是因为两个列表是独立的,排序其中一个时,另一个的顺序不会同步变化,最后符号和原子量就对不上了。我来给你几个实用的解决思路和改进后的代码:
核心思路:把符号和原子量绑定在一起
与其用两个单独的列表存储,不如把每一行的元素符号和原子量打包成元组(或者字典),放到同一个列表里。这样排序的时候,两者的对应关系会一直保持,不会打乱。
改进后的代码示例
方法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
为什么你原来的方法行不通?
你原来的代码里有两个问题:
- 拼写错误:
wight_list.sort应该是weight_list.sort()(注意是weight不是wight,而且sort是方法要加括号) - 本质问题:就算修正了拼写,排序
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
相关产品推荐
相关产品推荐

