【问题标题】:Sorting by list column [duplicate]按列表列排序[重复]
【发布时间】:2016-02-29 21:11:05
【问题描述】:

我有这样的清单:

list1 = [["A",5,2,8,3],["B",9,5,1,5]]

我正在尝试按第二列对其进行排序。我希望 list1 然后是

[["B",9,5,1,5],["A",5,2,8,3]]

因为 9 大于 5 对吧?我正在使用

sorted(lis1, key=lambda a : a[1])

但是它没有排序;它只是保持原样。为什么这不起作用?

【问题讨论】:

  • 默认升序排列。将参数 reverse=True 添加到您的 sorted 函数以生成所需的输出

标签: python


【解决方案1】:

sorted:

返回从可迭代项中的新排序列表

不是就地排序。

【讨论】:

    【解决方案2】:

    你只需要反转它:

    list1 = [["A",5,2,8,3],["B",9,5,1,5]]
    list1 = sorted(list1, key=lambda a : a[1], reverse=True)
    print(list1)
    # outputs [["B",9,5,1,5],["A",5,2,8,3]]
    

    9>5,所以它在后面,除非你倒过来。

    【讨论】:

    • 试过了还是没变..
    • 奇怪...当我复制上面的代码并运行它时它可以工作
    • 你确定你在做:list1 = sorted(list1, key=lambda a : a[1], reverse=True)sorted 不修改列表,它返回一个修改后的列表...
    • 你也可以这样做:list1.sort(key=lambda a : a[1], reverse=True),它会修改list1,这样你就不需要重新分配给它了。
    • 啊哈!是的,现在我在它之前添加了 list1 = 。谢谢!
    【解决方案3】:

    使用 operator.itemgetter() 函数:

    from operator import itemgetter
    
    list1 = [["A",5,2,8,3],["B",9,5,1,5],["C",1,2,8,3]]
    
    print(sorted(list1, key=itemgetter(1)))
    print(sorted(list1, key=itemgetter(1), reverse=True))
    

    输出:

    [['C', 1, 2, 8, 3], ['A', 5, 2, 8, 3], ['B', 9, 5, 1, 5]]
    [['B', 9, 5, 1, 5], ['A', 5, 2, 8, 3], ['C', 1, 2, 8, 3]]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-18
      • 2015-11-14
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2020-04-30
      相关资源
      最近更新 更多