Используйте лямбду для создания кортежа и проверки, является ли первый элемент одним из предпочтительных значений:
>>> 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
<<code>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]
Что является формой Украсить, Сортировка, Украсить