如何对 python 3 中的列表进行排序,优先考虑特定值?

Posted

技术标签:

【中文标题】如何对 python 3 中的列表进行排序,优先考虑特定值?【英文标题】:How can I sort a list in python 3 with priority given to specific values? 【发布时间】:2020-05-05 23:14:28 【问题描述】:

我有一个名为 V 的列表。V 的元素将是以下之一:0,1,2 或 +inf

我想对此列表进行排序,使 2 始终位于开头,并且从那时起列表按升序排序。

例如,如果列表最初是 V = [0,1,2,inf] 然后它应该变成 V = [2,0,1,inf]

我很清楚如何使用条件语句执行此操作并附加到新列表中,但如果可能的话,我想使用键或理解对其进行排序。

我是用 Python3 写的,但我不想导入任何东西

【问题讨论】:

【参考方案1】:

使用 lambda 创建一个元组并测试第一个元素是否是首选值之一:

>>> V = [0,1,2,float('inf')] 
>>> sorted(V, key=lambda e: (e!=2, e))
[2, 0, 1, inf]

所以元组将是(True, the_value)(False, the_value) 之一。 False True 并且它胜过元组中的第二个实际值。

如果您有多个首选值,则可以将in 与一组首选值一起使用:

>>> sorted(V, key=lambda e: (e not in (1,2), e))
[1, 2, 0, inf]
>>> sorted(V, key=lambda e: (e not in (2,0), e))
[0, 2, 1, inf]

你也可以创建一个理解:

>>> [(e not in (0,2),e) for e in V]
[(False, 0), (True, 1), (False, 2), (True, inf)]

然后排序:

>>> [t[1] for t in sorted((e not in (0,2),e) for e in V)]
[0, 2, 1, inf]

这是Decorate, Sort, Undecorate的一种形式

【讨论】:

以上是关于如何对 python 3 中的列表进行排序,优先考虑特定值?的主要内容,如果未能解决你的问题,请参考以下文章

在python中,如何按元素的频率对列表进行排序

如何一次对字典或列表中的所有嵌套字典和列表进行排序?

基于Python,OpenCV中的优先级对轮廓进行排序

Python中元祖对象排序

如何对在python中存储为字符串的整数列表进行排序[重复]

如何对列表进行排序 python