【问题标题】:Sort a list numerically in Python在 Python 中对列表进行数字排序
【发布时间】:2012-11-21 16:30:41
【问题描述】:

所以我有这个列表,我们将它命名为 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']]

【问题讨论】:

  • 使用 operator 模块中的 itemgetter()。它并不为人所知,但旨在完全按照您的意愿行事。它比 lambdas 更容易阅读,实现起来也非常简单。
  • @MichaelDavidWatson,不幸的是 itemgetter 无法帮助对字符串进行数字排序。
  • 是的。但是,对于从谷歌来到这个页面的每个人来说,了解 itemgetter 仍然是件好事,他们正在寻找一个类似的解决方案,其中值已经是 float/int

标签: python list numbers numeric sorted


【解决方案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']

【讨论】:

    【解决方案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']
    

    【讨论】:

      【解决方案3】:
      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))
      

      瞧!

      【讨论】:

        【解决方案4】:

        如果您想按排序顺序返回完整列表,这可能会起作用。这将获取您的输入列表并在其上运行sorted。设置为Truereverse 参数以反向(降序)顺序对列表进行排序,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']]
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-11
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          • 2018-04-09
          • 1970-01-01
          • 2018-05-27
          • 2013-10-12
          相关资源
          最近更新 更多