基于子数组的第二个元素对多维数组进行排序
Posted
技术标签:
【中文标题】基于子数组的第二个元素对多维数组进行排序【英文标题】:Sort multidimensional array based on 2nd element of the subarray 【发布时间】:2013-12-04 15:58:40 【问题描述】:我有一个这样的数组:
[['G', 10], ['A', 22], ['S', 1], ['P', 14], ['V', 13], ['T', 7], ['C', 0], ['I', 219]]
我想根据第二个元素按降序对其进行排序。 理想的输出是:
[['I', 219], ['A', 22], ['P', 14], ... ]
【问题讨论】:
【参考方案1】:list.sort
, sorted
接受可选的key
参数。 key
函数用于生成比较键。
>>> sorted(lst, key=lambda x: x[1], reverse=True)
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]
>>> sorted(lst, key=lambda x: -x[1])
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]
>>> import operator
>>> sorted(lst, key=operator.itemgetter(1), reverse=True)
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]
【讨论】:
太晚了,你能解释一下 lambda 函数的作用吗? lambda 的返回值将用作排序键。关于lambda
本身,请阅读python文档:docs.python.org/3/tutorial/…
operator.itemgetter(1) 比 lambda 快吗?【参考方案2】:
使用itemgetter
from operator import itemgetter
a = [[1, 3, 5], [2, 511, 7], [17, 233, 1]]
a = sorted(a, key=itemgetter(1))
输出:[[1, 3, 5], [17, 233, 1], [2, 511, 7]]
itemgetter
也可以用于按多个子数组排序。
【讨论】:
【参考方案3】:这样做:
多维数组以第2列为基础降序排列:
list_name.sort(key=lambda x:x[1],reverse=True)
【讨论】:
【参考方案4】:x= [[8, 9, 7],
[1, 2, 3],
[5, 4, 3],
[4, 5, 6]]
x.sort(cmp=lambda x,y: cmp(x[0],y[0]))
print x
【讨论】:
以上是关于基于子数组的第二个元素对多维数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章