【问题标题】:How to find the top 3 lists in a list of list based on the last element in python?如何根据python中的最后一个元素找到列表列表中的前3个列表?
【发布时间】:2022-08-24 11:53:29
【问题描述】:

我有一个 Python 列表:

list_all = [[\'orange\', \'the dress\', \'127456\'],
            [\'pink\', \'cars\', \'543234\'],
            [\'dark pink\' \'doll\', \'124098\'],
            [\'blue\', \'car\', \'3425\'],
            [\'sky blue\', \'dress\', \'876765\']]

我想返回最后一部分中数字最多的前 3 个列表。像这样:

result = [[\'sky blue\', \'dress\', \'876765\'],
         [\'pink\', \'cars\', \'543234\'],
         [\'orange\', \'the dress\', \'127456\']]

我只是找不到这样做的逻辑。我已经尝试了很多,但只是被一行代码卡住了:

for each in list_all:
    if len(each[-1].split(\',\'))

我该如何解决这个问题?

    标签: python list nested-lists


    【解决方案1】:

    您可以使用sorted() 来做到这一点:

    sorted(list_all, key = lambda x: int(x[-1]))[-3:][::-1]
    

    输出:

    [['sky blue', 'dress', '876765'],
     ['pink', 'cars', '543234'],
     ['orange', 'the dress', '127456']]
    

    【讨论】:

    • 好答案!由于 OP 对 python 来说是新的,也许你想解释一下为什么代码有效。我可以想象,尤其是负索引对他们来说是新的。
    • 最好在此处包含一些解释,并链接到该解释以供进一步阅读(因为如果该答案被修改或删除,您不希望您的答案变得无用)
    • 另外,您可以做sorted(..., reverse=True)[:3],而不是切片和反转恶作剧
    • @PranavHosangadi 随意编辑它
    【解决方案2】:

    使用 lambda

    修改自:How to sort a 2D list?

    result  = sorted(list_all ,key=lambda l:int(l[-1]), reverse=True)[:3]
    

    这返回

    [['sky blue', 'dress', '876765'],
     ['pink', 'cars', '543234'],
     ['orange', 'the dress', '127456']]
    

    【讨论】:

    • 1您按错误的元素排序,2这不会返回您所说的内容,因为您只是直接从链接到的另一个问题中复制了答案
    • 仍然不正确
    • 我相信它有效,改变了关键
    • 好吧,它现在可以工作了,而不是在您将其更改为 int(...) 之前
    • 好吧,只是检查一下!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多