Изолировать первый элемент, никак не обойтись.
Затем, в остальной части списка, использовать ключ сортировки, который возвращает пару:
- первый приоритет - логическое значение дляуказать, соответствует ли это регулярному выражению или нет (отрицается, поэтому он появляется первым)
- второй приоритет самого элемента для сопоставления / несоответствия элементов
следующим образом:
import re
cols = ['ID', 'MP', 'FC', 'Dest_MP', 'Dest_FC', 'Origin_MP', 'Origin_FC']
new_cols = [cols[0]] + sorted(cols[1:],key=lambda x : (not bool(re.search("^FC|FC$",x)),x))
результат:
['ID', 'Dest_FC', 'FC', 'Origin_FC', 'Dest_MP', 'MP', 'Origin_MP']
если вы хотите, чтобы FC
отображался первым, добавьте третье значение к возвращаемому ключу.Давайте выберем длину строк (непонятно, что вы действительно хотите видеть как тай-брейк
key=lambda x : (not bool(re.search("^FC|FC$",x)),len(x),x)
Результат теперь:
['ID', 'FC', 'Dest_FC', 'Origin_FC', 'MP', 'Dest_MP', 'Origin_MP']
Обратите внимание, что sort
стабильно, поэтомуможет быть, вам вообще не нужен тай-брейк:
new_cols = [cols[0]] + sorted(cols[1:],key=lambda x : not bool(re.search("^FC|FC$",x)))
результат:
['ID', 'FC', 'Dest_FC', 'Origin_FC', 'MP', 'Dest_MP', 'Origin_MP']