Вы можете использовать sorted
со следующими key
:
l = ['mix', 'xyz', 'apple', 'xanadu']
sorted(l, key=lambda x: (x[0]!='x', x))
# ['xanadu', 'xyz', 'apple', 'mix']
Или, как @deepspace предлагает использовать str.startswith
:
sorted(l, key=lambda s: (not s.startswith('x'), s))
Приведенный выше ключ сортирует строки на основе кортежа, состоящего из логического значения, являющегося результатом выражения x[0]!='x'
, и самой строки:
[(x[0]!='x', x) for x in l]
# [(True, 'mix'), (False, 'xyz'), (True, 'apple'), (False, 'xanadu')]
Отсюда и первый критерий сортировкиявляется ли строка начинается с x
(имейте в виду, что False
и True
оцениваются как 0
и 1
), а затем сама строка сортируется в алфавитно-цифровом порядке.