#list #sorting
#Список #сортировка
Вопрос:
У меня есть список сообщений. Каждая запись имеет значение Ture или False, которое определяет, где в списке должна быть эта запись. Истинные сообщения должны быть в начале списка, а ложные сообщения должны быть в конце. Как я могу отсортировать такой список? Например:
posts[0].value = True
posts[1].value = False
posts[2].value = False
posts[3].value = True
должен быть отсортирован следующим образом:
post [0], post [3], post [1], post [2]
Заранее спасибо
Комментарии:
Ответ №1:
Вы можете сделать это следующим образом:
posts.sort(key=lambda x: not x.value)
key
используется для указания пользовательской функции для сравнения элементов в списке. Функция переключает value
, потому что в Python False
< True
.
Комментарии:
1. Я только что использовал его, скажите нам, почему он не работает.
sorted
создает другой список, используйтеsort
метод в вашем списке, чтобы изменить его.2. Не обращай на это внимания. Это действительно работает. По какой-то причине я сделал: сортировка (сообщения, ключ ….) Наверное, я неправильно его истолковал. Спасибо!
Ответ №2:
Это скорее группировка, чем сортировка, поскольку первая операция — O (n), а другая — O (n * logn);
t = (i for i in posts if i.value)
f = (i for i in posts if not i.value)
list(itertools.chain(t, f))
Комментарии:
1. Я верю, что это работает. Сначала я делал что-то похожее на это. Однако вместо этого я хотел использовать сортировку. Хотя спасибо