【问题标题】:Sorting python list containing positive and negative elements对包含正负元素的python列表进行排序
【发布时间】:2018-08-17 17:33:01
【问题描述】:

我想按降序对包含正面和负面元素的以下列表进行排序。它确实部分排序,即正确查找/排序积极元素。但是,负面元素似乎是错误的。

>>> sorted([u'-10.44%', u'-9.35%', u'-4.20%', u'-1.23%', u'-15.37%', u'-13.51%', u'-11.94%', u'10.07%', u'0.32%', u'-4.02%', u'-12.69%', u'-17.28%'],reverse=True)
[u'10.07%', u'0.32%', u'-9.35%', u'-4.20%', u'-4.02%', u'-17.28%', u'-15.37%', u'-13.51%', u'-12.69%', u'-11.94%', u'-10.44%', u'-1.23%']

我希望它会以这种(降序)格式打印:

[u'10.07%', u'0.32%', u'-1.23%', u'-4.02%', u'-4.20%', u'-9.35%', u'-10.44%', u'-11.94%', u'-12.69%', u'-13.51%', u'-15.37%', u'-17.28%' ]

有人可以解释为什么会这样吗?

提前致谢!

【问题讨论】:

    标签: python-2.7 list sorting


    【解决方案1】:

    列表由 unicode 字符串组成。如果希望它们按数字排序,则需要根据字符串的浮点值对它们进行排序。

    让我们定义您的列表:

    >>> mylist = [u'-10.44%', u'-9.35%', u'-4.20%', u'-1.23%', u'-15.37%', u'-13.51%', u'-11.94%', u'10.07%', u'0.32%', u'-4.02%', u'-12.69%', u'-17.28%']
    

    现在,让我们根据每个字符串的浮点值对其进行排序:

    >>> sorted(mylist, key=lambda x: float(x.rstrip('%')), reverse=True)
    ['10.07%', '0.32%', '-1.23%', '-4.02%', '-4.20%', '-9.35%', '-10.44%', '-11.94%', '-12.69%', '-13.51%', '-15.37%', '-17.28%']
    

    或者,等效地:

    >>> sorted(mylist, key=lambda x: -float(x.rstrip('%')))
    ['10.07%', '0.32%', '-1.23%', '-4.02%', '-4.20%', '-9.35%', '-10.44%', '-11.94%', '-12.69%', '-13.51%', '-15.37%', '-17.28%']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-29
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      相关资源
      最近更新 更多