对包含正面和负面元素的python列表进行排序

时间:2018-03-09 07:37:39

标签: python-2.7 list sorting

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

>>> 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%' ]

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

该列表由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%']