【问题标题】:Sorting a list but keeping the order of duplicates [duplicate]对列表进行排序但保持重复的顺序[重复]
【发布时间】:2021-12-23 11:15:27
【问题描述】:

我必须根据到期日期 (YYYYMMDD) 对我的所有项目进行排序,到期日期越早,项目应该越接近列表末尾(reverse=True 的原因)以及到期日期何时是一样的,我应该有一个在接近末尾的时候添加的那个(FIFO)。我尝试使用sorted() 函数,正如您在此处看到的,结果与我想要的结果不同。

a = "20220202", "ACME Rice Ltd."
b = "20220315", "UniCORN & co."
c = "20771023", "RICE Unlimited"
d = "20220921", "G. P. a C."
e = "20220202", "Theorem's Rice"

lst = [a, b, c, d, e]

lst = sorted(lst, reverse=True, key=lambda x: x[0])

lst_output = [c, d, b, a, e]
lst_desired_output = [c, d, b, e, a]

有什么方法可以在这里使用sorted() 函数,还是我必须完全做其他事情?

【问题讨论】:

  • 现在试试lst = [e, d, c, b, a]。您要求函数以相反的顺序对列表进行排序,以便它完全符合您的要求。如果reverse=True 基本上它会从头到尾迭代,所以如果你想保持顺序 - 使用反向列表。
  • @OlvinR​​oght 是的,这将是最简单的方法,但是我不是决定首先存储哪个“项目”的人 - 我不决定项目的排序顺序名单。这是我的主要问题
  • sorted() 稳定,保持原来的顺序。但是当你使用reverse=True时,这意味着它使用了与原件相反的顺序。
  • @OlvinR​​oght 我明白这一点,这就是为什么我要问是否有办法不反转重复项。非常感谢您的意见!到目前为止,我可能还没有正确理解排序的反向。有帮助:)
  • @Petra,通过 lst[::-1]reversed(lst)

标签: python list sorting duplicates


【解决方案1】:

您应该对反向列表进行排序,因此最后一项将始终排在第一位:

sorted(reversed(lst), reverse=True, key=lambda x: x[0])

或按顺序倒序排列:

sorted(lst, key=lambda x: x[0])[::-1]
# list(reversed(sorted(lst, key=lambda x: x[0])))

输出:

[('20771023', 'RICE Unlimited'),
 ('20220921', 'G. P. a C.'),
 ('20220315', 'UniCORN & co.'),
 ('20220202', "Theorem's Rice"),
 ('20220202', 'ACME Rice Ltd.')]

【讨论】:

    猜你喜欢
    • 2021-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-09
    • 2018-01-26
    • 2018-04-04
    • 2018-01-03
    • 1970-01-01
    相关资源
    最近更新 更多