Python使用sorted()排序时如何保留重复排序键元素的原有顺序
问题根源
你当前的排序逻辑仅将到期日期作为排序key,Python的sorted()是稳定排序,当两个元素的key值相等时,会保留它们在原列表中的相对顺序。你示例中原列表a的位置早于e,相同日期下稳定排序会让a排在e前面,和你“到期日相同时先添加的商品更靠近列表末尾”的需求相反。
解决方案
可以直接用sorted()实现需求,只需要把元素的原始索引加入排序key的第二个维度即可:
- 第一排序维度为到期日期,倒序排列保证日期越早的元素越靠后
- 第二排序维度为元素在原列表中的索引,倒序排列保证相同日期下原始索引更小(先添加)的元素更靠后
实现代码
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] # 用enumerate获取每个元素的原始索引 lst = sorted(enumerate(lst), reverse=True, key=lambda x: (x[1][0], x[0])) # 提取排序后的商品元素 lst = [item[1] for item in lst] print(lst) # 输出与预期一致:[c, d, b, e, a]
内容的提问来源于stack exchange,提问作者Petra Štěpánová
相关产品推荐
相关产品推荐

