尝试对字符串和浮点数都包含的列表进行排序



我有一个包含元素和它们的权重的文件,它看起来像这样:

Ac 227.0
Ag 107.868
Al 26.98154
and so on

我的任务是将文件中的所有信息读取到程序中,并根据元素的权重排序。所以我想先得到氢和它相应的质量,然后是氦和它相应的质量,以此类推。我试着做了两个表,一个包含所有的重量,一个包含化学符号。这样我可以对包含权重的列表进行排序,但我不知道如何将这两个组合成一个列表。任何帮助都是有益的。

代码大致如下:

def create_lists():
atomic_file = open('atomer2.txt', 'r')
symbol_list = []
weight_list = []
for line in atomic_file:
symbol_list.append(line.split()[0])
weight_list.append(line.split()[1])
wight_list.sort
atomic_file.close()
return symbol_list, weight_list
``

您可以创建一个列表,其中的每个元素在其权重中包含元素的名称,然后按权重排序,如下所示:

st = """Ac 227.0
Al 26.98154
Ag 107.868"""
lst = [(line.split(' ')[0], float(line.split(' ')[1])) for line in st.split('n')]
lst.sort(key=lambda x:x[1])
print(lst)

你很接近了。使用split()或其他解析方法将每个元素附加到列表中(您可以将它们存储为对象,它们自己的列表等),然后使用lambda进行排序,lambda是在排序操作期间调用的函数,并提供要排序的值:

elements = []
for line in atomic_file:
elements.append(s.split())

elements.sort(key=lambda x: float(x[1]))

这样你得到一个数组的数组,其中包含元素数据作为字符串。因此,因为它们是字符串,所以在排序时需要使用float()将它们转换为数值。

print(elements)    
# [['Al', '26.98154'], ['Ag', '107.868'], ['Ac', '227.0']]

另一种选择,读取文件并将权重作为字符串数组(lines)的键进行排序

with open('atomer2.txt', 'r') as fd:
lines = sorted(fd.readlines(), key=lambda x: float(x.split(" ")[1]))

最新更新