在Python中对数字进行排序
问题描述:
所以我有这个列表,我们将它称为listA。我试图让每个列表中的[3]项目['5.01','5.88','2.10','9.45','17.58','2.76']
按排序顺序。所以最终的结果会在顶部与圣诞老人重新开始整个列表。这有任何意义吗?在Python中对数字进行排序
[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']]
答
如果你想返回有序的完整列表,这可能工作。这需要输入列表并在其上运行sorted
。所述reverse
参数设置为True
排序反向(降序)的顺序列表,并且key
参数指定通过该排序的方法中,在这种情况下是每个列表的第三个参数的float
:
In [5]: l = [['John Doe', u'25.78', u'20.77', '5.01'] # continues...
In [6]: sorted(l, reverse=True, key=lambda x: float(x[3]))
Out[6]:
[['Santa', u'31.13', u'13.55', '17.58'],
['Michael Jordan', u'28.50', u'19.05', '9.45'],
['Jane Doe', u'21.08', u'15.20', '5.88'],
['John Doe', u'25.78', u'20.77', '5.01'],
['Easter Bunny', u'17.20', u'14.44', '2.76'],
['James Bond', u'20.57', u'18.47', '2.10']]
如果你只需要排序顺序的值,其他答案提供了可行的方法。
答
试试这个:
>>> listA=[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']]
>>> [x[3] for x in sorted(listA, reverse = True, key = lambda i : float(i[3]))]
['17.58', '9.45', '5.88', '5.01', '2.76', '2.10']
答
from operator import itemgetter
lstA.sort(reverse = True, key = itemgetter(3))
,你是好去。当您有多个索引进行排序时,在排序中使用itemgetter()非常有用。假设你想按照字母顺序排列第一个值,以便在以下情况下可以执行以下操作
from operator import itemgetter
lstA.sort(key = itemgetter(0))
lstA.sort(reverse = True, key = itemgetter(3))
和Voilà!
使用操作员模块中的itemgetter()。它并不是很清楚,但它的目的就是为了做到你想要的。它比lambda更容易阅读,并且实现起来非常简单。 –
@MichaelDavidWatson,不幸的是itemgetter不会帮助用数字排序字符串。 –
是的。但是,从Google寻找一个类似的解决方案,其中的值已经是float/int –