【问题标题】:Sorting decimals in python在python中对小数进行排序
【发布时间】:2015-05-05 03:16:31
【问题描述】:

我有一个清单

    list1 = ["1.10","1.1","1.23","2.20","2.2"]

我用过

    list1.sort(key=float)

它给出了输出

   list1 = ["1.10","1.1","1.23","2.20","2.2"]

但是我正在寻找这个:

   list1 = ["1.1","1.10","1.23","2.2","2.20"]

有什么想法可以做到这一点吗?

【问题讨论】:

  • 我使用了 list1.sort(key=int) 来提供输出 你真的吗?您使用的是什么实现和版本的 Python?我尝试得到的唯一“输出”是ValueError
  • 第一:你需要key=float。第二:Python使用稳定排序。所以 1.10 等于 1.1 将始终按此顺序出现,因为原始顺序。一个简单的list1.sort() 将为这个单个列表产生这种行为,因为它会比较字符串,而不是数字
  • 您确实意识到 1.10 == 1.1 和 2.20 == 2.2,这些数字对完全相同相同,您没有理由期望它们以一种方式排序或其他...
  • 您可能需要key=decimal.Decimal 而不是key=float。对这些示例没有影响,但对您的真实数据可能会有影响。
  • @VaibhavMule 不,这与我的问题不同

标签: python sorting decimal


【解决方案1】:

如果你想考虑字符串的长度,你必须告诉 key 函数。我们必须构造一个键,其中首先考虑 float 值,然后考虑字符串的长度。

最简单的方法是用这两个值创建一个元组。

>>> list1 = ["1.10","1.1","1.23","2.20","2.2"]
>>> list1.sort(key=lambda x: (float(x), len(x)))
>>> list1
['1.1', '1.10', '1.23', '2.2', '2.20']

【讨论】:

    【解决方案2】:

    这不是一个解决方案,但我可以尽我所能开始:

    string1 = ["1.10","1.1","1.23","2.2","2.20"]
    for x in string1:
        if x.find('0') > 0:
            place = string1.index(x)
            string1.remove(x)
            string1.insert(place+1, x)
    print (string1)
    

    它现在唯一的问题是随着列表的迭代,它会一次又一次地遍历相同的值,推动它们向前发展。也许一个函数可以防止这种情况发生。

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2011-01-06
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多