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

How can I sort a list in python 3 with priority given to specific values?

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

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

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

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

我在 Python3 中写这篇文章,但我不想导入任何东西

使用 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

的一种形式