【问题标题】:Python: Move specific lists within list, based on an element, at the endPython:在最后根据元素移动列表中的特定列表
【发布时间】:2021-12-13 12:57:41
【问题描述】:

我有一个包含其他列表的列表。此列表的每个元素包含 5 个元素,如下所示:

requests = [['abc', 'def', 'abc.def@email.com', 'GROUP1', '000'],
           ['ghi', 'jkl', 'ghi,jkl@email.com', 'GROUP4', '111'],
           ['mno', 'pqr', 'mno.pqr@email.com', 'GROUP4', '222'],
           ['stu', 'vxy', 'stu.vxy@email.com', 'GROUP2', '333'],
           ['123', '456', '123.456@email.com', 'GROUP4', '444'],
           ['A12', 'B34', 'A12.B34f@email.com', 'GROUP3', '555']]

我想对这个列表进行排序,这样每个包含等于 GROUP4 的元素的列表都将放在列表的末尾。因此,输出将如下所示:

requests = [['abc', 'def', 'abc.def@email.com', 'GROUP1', '000'],
           ['stu', 'vxy', 'stu.vxy@email.com', 'GROUP2', '333'],
           ['A12', 'B34', 'A12.B34f@email.com', 'GROUP3', '555'],
           ['ghi', 'jkl', 'ghi,jkl@email.com', 'GROUP4', '111'],
           ['mno', 'pqr', 'mno.pqr@email.com', 'GROUP4', '222'],
           ['123', '456', '123.456@email.com', 'GROUP4', '444'],]

我设法根据该特定元素对它们进行排序:

requests.sort(key=lambda x: x[3])

但这只是根据第 4 个元素按字母顺序对它们进行排序。如果 GROUP5 或 GROUP6 存在,这将不起作用,因为这 2 将是最后一个元素。

关于如何做到这一点的任何想法?

非常感谢!

【问题讨论】:

  • 试试这个简单的改变 - requests.sort(key=lambda x: x[3] == "GROUP4") 当第三项是GROUP4时使用True的技巧

标签: python list sorting


【解决方案1】:

您可以更改lambda以检查第4项是否为'GROUP4'

requests.sort(key=lambda x: x[3] == 'GROUP4')

如果您还想对列表的其余部分进行排序,请在lambda 中使用tuple 和两个项目,它将首先按'GROUP4' 排序,然后按字典顺序排序

requests.sort(key=lambda x: (x[3] == 'GROUP4', x[3]))

【讨论】:

    【解决方案2】:

    通过布尔排序将索引 [3] 处的 GROUP4 列表移动到末尾。

    requests.sort(key=lambda el: el[3] == "GROUP4")
    

    【讨论】:

    • 我认为您可以通过指定 .sort 保证是稳定排序来详细说明您的答案,这在这种情况下意味着您的代码 sn-p 只会将 "GROUP4" 元素移动到末尾列表,没有其他元素的顺序修改。
    猜你喜欢
    • 1970-01-01
    • 2021-08-10
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    相关资源
    最近更新 更多