Как я могу отсортировать список в python 3 с приоритетом заданных значений c? - PullRequest
1 голос
/ 06 мая 2020

У меня есть список с именем V. Элементы V будут одним из следующих: 0,1,2 или + inf

Я хотел бы отсортировать этот список так, чтобы 2 всегда находился в начало, и с этого момента список сортируется в возрастающем порядке.

Например, если список изначально имеет вид V = [0,1,2, inf], он должен затем стать V = [2,0,1 , inf]

У меня есть хорошее представление о том, как это сделать с помощью условных обозначений и добавления в новый список, но, если возможно, я хотел бы отсортировать это с помощью ключа или понимания.

Я пишу это в Python3, но я бы предпочел ничего не импортировать

1 Ответ

2 голосов
/ 06 мая 2020

Используйте лямбду для создания кортежа и проверки, является ли первый элемент одним из предпочтительных значений:

>>> 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]

Что является формой Украсить, Сортировка, Украсить

...