【发布时间】: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基本上它会从头到尾迭代,所以如果你想保持顺序 - 使用反向列表。 -
@OlvinRoght 是的,这将是最简单的方法,但是我不是决定首先存储哪个“项目”的人 - 我不决定项目的排序顺序名单。这是我的主要问题
-
sorted()稳定,保持原来的顺序。但是当你使用reverse=True时,这意味着它使用了与原件相反的顺序。 -
@OlvinRoght 我明白这一点,这就是为什么我要问是否有办法不反转重复项。非常感谢您的意见!到目前为止,我可能还没有正确理解排序的反向。有帮助:)
-
@Petra,通过
lst[::-1]或reversed(lst)。
标签: python list sorting duplicates