Python - 如何按每个列表中的第四个元素对列表列表进行排序? [复制]

Posted

技术标签:

【中文标题】Python - 如何按每个列表中的第四个元素对列表列表进行排序? [复制]【英文标题】:Python - How to sort a list of lists by the fourth element in each list? [duplicate] 【发布时间】:2013-07-07 11:20:20 【问题描述】:

我想按每个单独列表中的第四个元素(整数)对以下列表列表进行排序。

unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']]

我该怎么做? 谢谢!

【问题讨论】:

您要按第二个元素还是第四个元素排序? 【参考方案1】:
unsorted_list.sort(key=lambda x: x[3])

【讨论】:

值得注意的是,在这个方法中,整数是按字典顺序比较的。因此,'5' 将大于'20'。如果要进行整数比较,则应使用key=lambda x: int(x[3]) 您也可以在此处使用key=itemgetter(3)(来自operator 模块)。虽然有些人发现 itemgetterattrgetter 的可读性不如 lambda,但其他人却广泛使用它们,因此至少值得能够阅读它们并了解它们的作用。 这就是我喜欢python的原因 x = [[[5,3],1.0345],[[5,6],5.098],[[5,4],4.89],[[5,1],5.97] ] 有了这样的列表,我们如何对 x[0][1] 中的元素进行排序? 要按降序排序,添加reverse=True作为参数。【参考方案2】:

如下使用sorted()key -

>>> unsorted_list = [['a','b','c','5','d'],['e','f','g','3','h'],['i','j','k','4','m']]
>>> sorted(unsorted_list, key = lambda x: int(x[3]))
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']]

lambda 返回每​​个内部列表的第四个元素,sorted 函数使用它对这些列表进行排序。这假定int(elem) 不会在列表中失败。

或使用itemgetter(正如 Ashwini 的评论所指出的,如果您有数字的字符串表示,则此方法将不起作用,因为它们必然会在某处失败 2 位以上的数字)

>>> from operator import itemgetter
>>> sorted(unsorted_list, key = itemgetter(3))
[['e', 'f', 'g', '3', 'h'], ['i', 'j', 'k', '4', 'm'], ['a', 'b', 'c', '5', 'd']]

【讨论】:

如果列表包含 itemgetter 将不起作用:[['a','b','c','100','d'],['e','f','g','2','h'],['i','j','k','4','m']] 是的。也许我应该删除它,lambda 在这里可以解决问题。 是的,itemgetter(3) 只替换了lambda x: x[3],而不是lambda x: int(x[3])。 (你可以compose(int, itemgetter(3)),但前提是你疯了,或者真的决定用 Python 编写 Haskell 或 Lisp 代码……) x = [[[5,3],1.0345],[[5,6],5.098],[[5,4],4.89],[[5,1],5.97] ] 对于这样的列表,我们可以使用 itemgetter() 对 x[0][1] 中的元素进行排序吗?

以上是关于Python - 如何按每个列表中的第四个元素对列表列表进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle 表的 varchar 列中的第二个和第四个字符之后插入“/”

Python:按“列”对列表进行排序[重复]

如何拆分Python列表每第N个元素

c++ stl 中 lower_bound 的第四个参数的用法

连接列表的元素对

循环到每个元素的数组方法