【问题标题】:Sorting(rearranging) the list [duplicate]排序(重新排列)列表[重复]
【发布时间】:2019-09-18 19:39:55
【问题描述】:

我一直在努力对列表进行排序或重新排列。我想根据数字(列表中的最后一个元素)按降序对列表进行排序。
因此,理想情况下,带有 (297539) 的列表将位于顶部;而带有 (234933) 的列表将位于底部:

[...., '297539']
[..]
[..]
[...., '234933']

有人可以帮我解决这个问题吗?非常感谢。 这是我到目前为止所做的output

【问题讨论】:

    标签: python


    【解决方案1】:

    sorted 与自定义key 函数一起使用:

    # example list
    l = [['a', '297539'],['sas', '257539'],['absdas', '287539'],['xasd', '234933']]
    sorted(l, key=lambda x: int(x[-1]), reverse=True)
    # [['a', '297539'], ['absdas', '287539'], ['sas', '257539'], ['xasd', '234933']]
    

    【讨论】:

    • int 多余的@Nihal 怎么样?字符串按字典顺序排序,即'9' > '12',所以数字必须转为整数,否则只考虑第一个数字
    • 你是对的,请原谅我的错误
    • 你也可以使用sorted(a,key =lambda x:int(itemgetter(1)(x)))
    • itemgetter 很有趣,因为它可以用来避免 lambda 函数,因为操作保留在 C 端,@prashantrana 不是这种情况
    【解决方案2】:

    使用itemgetter 可以处理循环

    from operator import itemgetter
    a = [['a', '297539'],['sas', '257539'],['absdas', '287539'],['xasd', '234933']]
    a = sorted(a, key=itemgetter(1),reverse=True)
    print(a)
    

    【讨论】:

    • itemgetter 比使用 lambda 函数更好,很好的解决方案,不知道为什么你会收到反对票
    • 不是我@prashantrana,但我在这里看到的问题是,正如评论所提到的,这是按字典顺序排序(因为数字是字符串),这意味着在对数字'9' > '12' 进行排序时,这大概是不是OP想要的吗?
    • @yatu,我没试过。你是对的,这种方法在那种情况下失败了。 sorted(a,key =lambda x:int(itemgetter(1)(x))) 对现有解决方案的改进。使用 lambda 我想你的答案要好得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2015-09-16
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多