【问题标题】:How to sort a list by checking values in a sublist in python?如何通过检查python子列表中的值来对列表进行排序?
【发布时间】:2011-05-20 08:03:44
【问题描述】:

我有以下格式的列表:

[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]]

我想在python中使用数字列表元素以一种有效的方式排序,匹配第一个元素,当它相同时,使用第二个,依此类推。 结果会是这样的(这次我需要倒序):

['a',[10]]
['c',[5,10]]
['e',[5,1,-1]]
['d',[5,1,-10]
['b',[1]]

谢谢!

【问题讨论】:

  • 这和递归无关,所以我把标签去掉

标签: python list sorting


【解决方案1】:

我认为列表比较像你想要的,默认情况下,如果倒置:

>>> data = [['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]
>>> sorted(data, reverse = True, key = lambda pair: pair[1])
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]

您的输入列表中有一个括号错误,它已在上面的代码中修复。

【讨论】:

  • +1,被打败了。注意sorted() 返回一个新列表;如果您想就地修改现有列表,请使用其sort() 方法,该方法采用相同的参数,即data.sort(reverse=True, key=lambda pair:pair[1])
  • 哈!很高兴知道它是默认发生的。我试图弄清楚如何自己做:)
【解决方案2】:
>>> from operator import itemgetter
>>> L=[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]]
>>> sorted(L, key=itemgetter(1), reverse=True)
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]
>>> 

我会在这里使用 itemgetter(1) ,它大致相当于其他答案中的 lambda 函数。这有效地使用子列表的键进行排序,因为它们是项目编号 1。(项目编号 0 是字母 a-e)

【讨论】:

    【解决方案3】:

    使用key选择列表中的第二个元素,使用reverse改变方向:

    >>> l=[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10], ['e',[5,1,-1]]]
    >>> sorted(l, key=lambda e:e[1], reverse=True)
    [['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]
    

    列表通过按顺序比较其元素进行排序,就像词典或常规字典一样。它被称为“词法比较”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多