在Python中以数字方式对列表进行排序

时间:2012-12-04 04:51:35

标签: python list numbers numeric sorted

所以我有这个列表,我们称之为listA。我试图在每个列表中获取[3]项目,例如按排序顺序排列['5.01','5.88','2.10','9.45','17.58','2.76']。因此,最终结果将在圣诞老人的顶部重新开始整个列表。这有什么意义吗?

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

4 个答案:

答案 0 :(得分:6)

如果要按排序顺序返回完整列表,这可能有效。这将获取您的输入列表并在其上运行sorted。设置为reverse的{​​{1}}参数按反向(降序)顺序对列表进行排序,True参数指定排序的方法,在本例中为{{1}每个列表的第三个参数:

key

如果您只需要排序顺序的值,其他答案提供了可行的方法。

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:1)

此任务不需要匿名lambda功能。您可以使用operator.itemgetter,这可能更直观:

from operator import itemgetter

res1 = sorted(map(itemgetter(3), listA), reverse=True, key=float)

['17.58', '9.45', '5.88', '5.01', '2.76', '2.10']

答案 3 :(得分:0)

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à!