Вам нужно определить свой собственный ключ для сравнения.Вы хотите, чтобы пустые строки были последними.Мы можем использовать тот факт, что пустая строка имеет вид falsey .
>>> bool('a')
True
>>> bool('')
False
True
больше, чем False
, поэтому непустые строки будут отсортированы после пустых строк, но мынужно наоборот.
>>> not 'a'
False
>>> not ''
True
В качестве второго критерия сортировки мы возьмем саму строку.Для этого мы должны сравнить кортеж (not s, s)
, где s
- строка.
Мы можем передать это в sorted
с параметром key
и функцией lambda
.
>>> data = ['stro', 'asdv', '', 'figh']
>>> print(sorted(data, key=lambda s: (not s, s)))
['asdv', 'figh', 'stro', '']
Если вы хотите, чтобы это было в обратном порядке, добавьте параметр reverse
.
>>> print(sorted(data, key=lambda s: (not s, s), reverse=True))
['', 'stro', 'figh', 'asdv']
Обратите внимание, что я переименовал вашу переменную от list
до data
.Если вы используете list
, вы перезаписываете встроенный list
, и это плохая идея, даже в примере.