【问题标题】:Sorting list of list based on Inner List's Multiple Integer elements [duplicate]基于内部列表的多个整数元素的列表排序列表[重复]
【发布时间】:2019-10-27 06:38:31
【问题描述】:

我想根据两个因素对列表列表进行排序:

  • 主要:列表必须根据列表中每个列表的第二个元素按升序排序
  • 如果存在各种列表具有相同第二个元素的情况,则必须根据第一个元素按升序对这些特定列表进行排序。

data_input: [ [78, 10], [130, 0], [10, 1], [100, 100], [2, 2], [1, 99], [100, 0] ]

我正在使用此代码基于第一个标准进行排序

data_input.sort(key= lambda x: x[1])

但也想不出任何方法来实现第二个标准

期望的输出:

  • data_input: [ [100, 0], [130, 0], [10, 1], [2, 2], [78, 10], [1, 99], [100, 100] ]*

【问题讨论】:

    标签: python list sorting


    【解决方案1】:

    您可以使用sorteditemgetter 来指定必须从子列表中获取项目的顺序:

    from operator import itemgetter
    
    sorted(data_input, key=itemgetter(1,0))
    # [[100, 0], [130, 0], [10, 1], [2, 2], [78, 10], [1, 99], [100, 100]]
    

    【讨论】:

    • is key=itemgetter(1,0) 是先根据内部列表的1 索引然后0 索引对列表进行排序?
    • 是的,没错@aman
    • 使用这种方法,对于这个特定的例子,我怎样才能以相反的顺序对第一个元素进行降序排序?
    • 为此,您需要一个 lambda 函数,并且您必须取第一项的负数,以便以相反的顺序对其进行排序
    【解决方案2】:

    使用元组作为key 参数到sorted

    data_input = [ [78, 10], [130, 0], [10, 1], [100, 100], [2, 2], [1, 99], [100, 0] ]
    
    print(sorted(data_input, key=lambda x: (x[1], x[0])))
    # [[100, 0], [130, 0], [10, 1], [2, 2], [78, 10], [1, 99], [100, 100]]
    

    这基本上要求 Python 按x[1] 排序,对于相同的x[1],按x[0] 排序。

    【讨论】:

    • 您能解释一下key = lambda x: (x[1], x[0]) 的工作原理吗?
    • key sorted 的参数可用于说明您需要在什么基础上进行排序。 (x[1], x[0]) 部分告诉按x[1](每个子列表中的第二个元素)排序,对于相同匹配的x[1]s(相同的第二个元素),按x[0](每个子列表中的第一个元素)排序。
    • @ Austin 对于这个特定的示例我如何按降序对第一个元素进行排序(保持第二个元素作为主要元素以按升序排序)
    • 使用:key=lambda x: (x[1], -x[0]).
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2023-03-18
    • 1970-01-01
    • 2018-05-08
    • 2011-03-29
    相关资源
    最近更新 更多