【问题标题】:Trying to sort a list with both strings and floats尝试对同时包含字符串和浮点数的列表进行排序
【发布时间】:2022-12-10 22:54:46
【问题描述】:

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

Ac 227.0
Ag 107.868
Al 26.98154
and so on

我的任务是将文件中的所有信息读取到程序中,并根据元素的权重对列表进行排序。所以我首先要氢及其相应的重量,氢之后是氦及其相应的重量等等。我尝试制作 2 个列表,一个包含所有重量,一个包含化学符号。这样我就可以对包含权重的列表进行排序,但我真的不知道如何将 2 组合成一个列表。任何帮助都是有帮助的。

继承人的代码差不多:

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
``

【问题讨论】:

    标签: python


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      你很接近。使用 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']]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2021-08-12
        • 2021-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-02
        相关资源
        最近更新 更多