список сортировки python по true или false

#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. docs.python.org/2/howto/sorting.html

Ответ №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. Я верю, что это работает. Сначала я делал что-то похожее на это. Однако вместо этого я хотел использовать сортировку. Хотя спасибо