Python имеет отсортированный список?

Этот ответ может возвратиться неожиданные результаты Для последовательных результатов, использовать один из ДЛЯ методов ПУТИ XML, подробно изложенных в других ответах.

Использование COALESCE:

DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ', ', '') + Name 
FROM People

Просто некоторое объяснение (так как этот ответ, кажется, получает относительно регулярные представления):

  • Объединяют, действительно просто полезный обман, который выполняет две вещи:

1) Никакая потребность инициализировать @Names со значением пустой строки.

2) Никакая потребность снять изоляцию с дополнительного разделителя в конце.

  • решение выше даст неправильные результаты, если строка будет иметь ПУСТОЙ УКАЗАТЕЛЬ значение Имени (если будет ПУСТОЙ УКАЗАТЕЛЬ , , то ПУСТОЙ УКАЗАТЕЛЬ сделает @Names ПУСТОЙ УКАЗАТЕЛЬ после той строки, и следующая строка запустится по как пустая строка снова. Легко зафиксированный с одним из двух решений:
DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM People
WHERE Name IS NOT NULL

или:

DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ', ', '') + 
    ISNULL(Name, 'N/A')
FROM People

В зависимости от того, какое поведение Вы хотите (право преимущественной покупки просто фильтрует ПУСТОЙ УКАЗАТЕЛЬ с, вторая опция сохраняет их в списке с сообщением маркера [заменяют and/A' тем, что подходит для Вас]).

120
задан Community 23 May 2017 в 12:10
поделиться

2 ответа

Стандартный список Python не сортируется ни в какой форме. Стандартный модуль heapq можно использовать для добавления в O (log n) к существующему списку и удаления наименьшего из O (log n), но это не отсортированный список в вашем определении.

Существуют различные реализации сбалансированных деревьев для Python, которые соответствуют вашим требованиям, например rbtree , RBTree или pyavl .

.
50
ответ дан 24 November 2019 в 01:41
поделиться

Модуль heapq может удовлетворить ваши потребности, хотя он (пока) не предоставляет пользовательской функции поиска. Он реализует очередь кучи с использованием обычного списка. Вам нужно будет написать свой собственный эффективный тест на членство, который использует внутреннюю структуру очереди (это можно сделать в O (log n) , я бы сказал ...). Есть один недостаток: извлечение отсортированного списка имеет сложность O (n log n) .

6
ответ дан 24 November 2019 в 01:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: