我想按降序对包含正面和负面元素的以下列表进行排序。它部分排序,即正确地查找/排序正元素。但是,负面因素似乎是错误的。
>>> 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%' ]
有人可以解释为什么会这样吗?
提前致谢!
答案 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%']