Упорядочить по убыванию: Как сделать сортировку в Excel по возрастанию и по убыванию

Содержание

Как сделать сортировку в Excel по возрастанию и по убыванию

Сортировка данных в Excel это очень полезная функция, но пользоваться ней следует с осторожностью. Если большая таблица содержит сложные формулы и функции, то операцию сортировки лучше выполнять на копии этой таблицы.

Во-первых, в формулах и функциях может нарушиться адресность в ссылках и тогда результаты их вычислений будут ошибочны. Во-вторых, после многократных сортировок можно перетасовать данные таблицы так, что уже сложно будет вернуться к изначальному ее виду. В третьих, если таблица содержит объединенные ячейки, то следует их аккуратно разъединить, так как для сортировки такой формат является не приемлемым.

Сортировка данных в Excel

Какими средствами располагает Excel для сортировки данных? Чтобы дать полный ответ на этот вопрос рассмотрим его на конкретных примерах.

Подготовка таблицы для правильной и безопасной сортировки данных:

  1. Выделяем и копируем всю таблицу.
  2. На другом чистом листе (например, Лист2)щелкаем правой кнопкой мышки по ячейке A1. Из контекстного меню выбираем опцию: «Специальная вставка». В параметрах отмечаем «значения» и нажимаем ОК.

Теперь наша таблица не содержит формул, а только результаты их вычисления. Так же разъединены объединенные ячейки. Осталось убрать лишний текст в заголовках и таблица готова для безопасной сортировки.

Чтобы отсортировать всю таблицу относительно одного столбца выполните следующее:

  1. Выделите столбцы листа, которые охватывает исходная таблица.
  2. Выберите инструмент на закладке: «Данные»-«Сортировка».
  3. В появившимся окне укажите параметры сортировки. В первую очередь поставьте галочку напротив: «Мои данные содержат заголовки столбцов», а потом указываем следующие параметры: «Столбец» – Чистая прибыль; «Сортировка» – Значения; «Порядок» – По убыванию. И нажмите ОК.

Данные отсортированные по всей таблице относительно столбца «Чистая прибыль».



Как в Excel сделать сортировку в столбце

Теперь отсортируем только один столбец без привязки к другим столбцам и целой таблицы:

  1. Выделите диапазон значений столбца который следует отсортировать, например «Расход» (в данном случаи это диапазон E1:E11).
  2. Щелкните правой кнопкой мышки по выделенному столбцу. В контекстном меню выберите опцию «Сортировка»-«от минимального к максимальному»
  3. Появится диалоговое окно «Обнаруженные данные вне указанного диапазона». По умолчанию там активна опция «автоматически расширять выделенный диапазон». Программа пытается охватить все столбцы и выполнить сортировку как в предыдущем примере. Но в этот раз выберите опцию «сортировать в пределах указанного диапазона». И нажмите ОК.

Столбец отсортирован независимо от других столбцов таблицы.

Сортировка по цвету ячейки в Excel

При копировании таблицы на отдельный лист мы переносим только ее значения с помощью специальной вставки. Но возможности сортировки позволяют нам сортировать не только по значениям, а даже по цветам шрифта или цветам ячеек. Поэтому нам нужно еще переносить и форматы данных. Для этого:

  1. Вернемся к нашей исходной таблице на Лист1 и снова полностью выделим ее, чтобы скопировать.
  2. Правой кнопкой мышки щелкните по ячейке A1 на копии таблицы на третьем листе (Лист3) и выберите опцию «Специальная вставка»-«значения».
  3. Повторно делаем щелчок правой кнопкой мышки по ячейе A1 на листе 3 и повторно выберем «Специальная вставка» только на этот раз указываем «форматы». Так мы получим таблицу без формул но со значениями и форматами
  4. Разъедините все объединенные ячейки (если такие присутствуют).

Теперь копия таблицы содержит значения и форматы. Выполним сортировку по цветам:

  1. Выделите таблицу и выберите инструмент «Данные»-«Сортировка».
  2. В параметрах сортировки снова отмечаем галочкой «Мои данные содержат заголовки столбцов» и указываем: «Столбец» – Чистая прибыль; «Сортировка» – Цвет ячейки; «Порядок» – красный, сверху. И нажмите ОК.

Сверху у нас теперь наихудшие показатели по чистой прибыли, которые имеют наихудшие показатели.

Примечание. Дальше можно выделить в этой таблице диапазон A4:F12 и повторно выполнить второй пункт этого раздела, только указать розовый сверху. Таким образом в первую очередь пойдут ячейки с цветом, а после обычные.

Язык запросов 1С 8.3 для начинающих программистов: упорядочивание

Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.

Войдите на сайт как ученик

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: упорядочивание

Автор уроков и преподаватель школы: Владимир Милькин

Упорядочивание в запросах

Давайте напишем запрос, который получает из таблицы Справочник.Еда код и название еды:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда

Как всегда, выполните этот запрос у себя на компьютере.

С большой долей вероятности у вас получится следующий результат:

Возможно вы удивитесь, но при таком написании запроса никто не гарантирует нам именно такого порядка выдачи записей в таблице. В случае использования клиент-серверного режима работы на различных СУБД результат мог бы быть и такой:

И такой:

И …, ну в общем вы поняли, что если мы не указываем порядок сортировки (упорядочивания) результата запроса, то этот самый порядок может быть абсолютно любым.

Секция УПОРЯДОЧИТЬ ПО

Поля по которым требуется упорядочить запрос перечисляются в секции

УПОРЯДОЧИТЬ ПО через запятую:

Следом за именем поля упорядочивания может идти одно из двух ключевых слов:

  • ВОЗР упорядочивание по возрастанию.
  • УБЫВ — упорядочивание по убыванию.

Если не указывать ни одно из этих слов, считается, что сортировка идёт по возрастанию.

Вооружившись знаниями, давайте упорядочим результат нашего запроса по убыванию поля Код:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Код УБЫВ

По возрастанию поля Наименование (алфавитный порядок):

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Наименование ВОЗР

А теперь упорядочим следующую таблицу

так, чтобы сначала шла сортировка по полю Вкус по возрастанию, а затем (среди строчек с одинаковым значением поля

Вкус) шла сортировка по полю Цвет по убыванию:

ВЫБРАТЬ
    Вкус,
    Цвет
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Вкус.Наименование ВОЗР,
    Цвет.Наименование УБЫВ

Отдельно обращаю ваше внимание на то, что мы указали сортировку не по самим полям Вкус и Цвет, а по их строковому реквизиту Наименование. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Это связано с тем, что сортировка возможна лишь по полям имеющим один из типов: СтрокаЧислоДата.

А поля Вкус и Цвет являются ссылками на элементы справочников Вкус и Цвет, сортировать по которым не имеет смысла (в этом случае сортировка будет вестись по внутреннему идентификатору ссылки). Зато можно сделать сортировку по одному из реквизитов этих элементов. Наиболее подходящим в нашем случае будет строковый реквизит

Наименование.

Возможность автоупорядочивания

Ключевое слово АВТОУПОРЯДОЧИВАНИЕ позволяет включить режим автоматического формирования полей для упорядочивания результатов запроса.

Мы сейчас познакомимся с этой возможностью подробно, но сразу хочется оговориться, что фирма «1С» в своих методических рекомендациях не советует использовать её без необходимости (о причинах этого мы поговорим ниже).

Итак, поехали.

Прежде всего, ключевое слово АВТОУПОРЯДОЧИВАНИЕ может быть расположено в запросе сразу за или вместо секции УПОРЯДОЧИТЬ ПО:

Автоупорядочивание работает по следующим принципам:

Случай #1

Если в запросе:

  • есть секция УПОРЯДОЧИТЬ ПО

Тогда ссылка на каждую таблицу в этой секции будут заменена полями, по которым по умолчанию сортируется эта таблица.

Для таблиц справочников полями сортировки по умолчанию являются код и наименование, выбор из которых осуществляется в соответствии с настройками справочника в конфигураторе:

Для таблиц документов полем сортировки по умолчанию является дата документа.

Рассмотрим пример:

ВЫБРАТЬ
    Наименование
ИЗ
    Справочник.Клиенты
УПОРЯДОЧИТЬ ПО
    ЛюбимыйЦвет
АВТОУПОРЯДОЧИВАНИЕ

Так как поле сортировки ЛюбимыйЦвет имеет тип Справочник.Цвета, в настройках которого основным представлением выбрано поле Наименование, то этот запрос эквивалентен:

ВЫБРАТЬ
    Наименование
ИЗ
    Справочник.Клиенты
УПОРЯДОЧИТЬ ПО
    ЛюбимыйЦвет.Наименование

Случай #2

Если в запросе:

  • отсутствует секция УПОРЯДОЧИТЬ ПО
  • но есть секция ИТОГИ ПО (её мы будем проходить позже)

В этом случае результат запроса будет упорядочен по полям итогов (в той же последовательности).

Если среди этих полей есть ссылки на таблицы, то они также будут заменены полями, по которым сортируются эти таблицы по умолчанию.

Случай #3

Если в запросе:

  • отсутствует секция УПОРЯДОЧИТЬ ПО
  • отсутствует секция ИТОГИ ПО
  • но есть секция СГРУППИРОВАТЬ ПО (группировку мы проходили здесь)

В этом случае результат запроса будет упорядочен по полям группировки (в той же последовательности).

Если среди этих полей есть ссылки на таблицы, то они также будут заменены полями, по которым сортируются эти таблицы по умолчанию.

Рассмотрим пример:

ВЫБРАТЬ
    Город,
    СУММА(Количество)
ИЗ
    Документ.ПрибытиеГостей
СГРУППИРОВАТЬ ПО
    Город
АВТОУПОРЯДОЧИВАНИЕ

Так как поле группировки Город имеет тип Справочник.Города, в настройках которого основным представлением выбрано поле Наименование, то этот запрос эквивалентен:

ВЫБРАТЬ
    Город,
    СУММА(Количество)
ИЗ
    Документ.ПрибытиеГостей
СГРУППИРОВАТЬ ПО
    Город
УПОРЯДОЧИТЬ ПО
    Город.Наименование

Случай #4

Наконец, если в запросе:

  • отсутствует секция УПОРЯДОЧИТЬ ПО
  • отсутствует секция ИТОГИ ПО
  • отсутствует секция СГРУППИРОВАТЬ ПО

В этом случае результат запроса будет упорядочен по полям сортировки по умолчанию для таблиц, из которых выбираются данные, в порядке их появления в запросе.

Рассмотрим пример:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
АВТОУПОРЯДОЧИВАНИЕ

Так как данные выбираются из справочника

Еда, в настройках которого основным представлением выбрано поле Наименование, то этот запрос будет эквивалентен:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Наименование

Почему использование автоупорядочивания нежелательно

Автоупорядочивание подходит:

  • для универсальных запросов, когда разработчик не может предвидеть из каких таблиц будут запрашиваться данные
  • для случаев, когда получаемый порядок записей не важен, но при этом он должен быть одинаковым в независимости от применяемой СУБД

Во всех остальных случаях использовать возможность автоупорядочивания нежелательно, так как поля, которые являются полями сортировки сегодня, могут перестать быть такими завтра.

Например, сегодня мы можем написать код, чувствительный к тому, чтобы результаты запроса из справочника

Еда были отсортированы по полю Наименование.

А завтра фирма «1С» (или другой разработчик) изменят настройки базы в конфигураторе так, что полем сортировки по умолчанию для справочника Еда станет, к примеру, поле Код. И, если мы использовали автоупорядочивание в запросе, то наш отчет сломается, ведь порядок сортировки уже будет другим. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

Поэтому всегда старайтесь указывать конкретные поля и конкретный порядок сортировки по ним в секции УПОРЯДОЧИТЬ ПО, такой запрос уже не сломать просто так:

ВЫБРАТЬ
    Код,
    Наименование
ИЗ
    Справочник.Еда
УПОРЯДОЧИТЬ ПО
    Наименование ВОЗР

Пройдите тест

а) Напишите запрос, который получает список клиентов, упорядоченный по их любимому цвету по возрастанию:

Сортировка данных в диапазоне или таблице

Если результаты сортировки данных не соответствуют ожиданиям, сделайте следующее.

Проверьте, не изменились ли значения, возвращаемые формулами    Если сортируемые данные содержат одну или несколько формул, значения, возвращаемые ими, при пересчете листа могут измениться. В этом случае примените сортировку повторно, чтобы получить актуальные результаты.

Перед сортировкой отобразите скрытые строки и столбцы    При сортировке по столбцам скрытые строки не перемещаются, а при сортировке по строкам не перемещаются скрытые столбцы. Перед сортировкой данных целесообразно отобразить скрытые строки и столбцы.

Проверьте текущий параметр языкового стандарта    Порядок сортировки зависит от выбранного языка. Убедитесь в том, что на панели управления в разделе Региональные параметры или Язык и региональные стандарты задан правильный языковой стандарт. Сведения о том, как изменить параметр языкового стандарта, см. в справке Microsoft Windows.

Вводите заголовки столбцов только в одну строку    Если необходимо использовать заголовки из нескольких строк, установите перенос слов в ячейке.

Включите или отключите строку заголовков    Обычно рекомендуется отображать строку заголовков при сортировке по столбцам, так как она облегчает восприятие данных. По умолчанию значение в заголовке не включается в сортировку. Но в некоторых случаях может потребоваться включить или отключить заголовок, чтобы значение в заголовке включалось или не включалось в сортировку. Выполните одно из следующих действий.

  • Чтобы исключить из сортировки первую строку данных (заголовок столбца), на вкладке Главная в группе Редактирование нажмите кнопку Сортировка и фильтр, выберите команду Настраиваемая сортировка и установите флажок Мои данные содержат заголовки.

  • Чтобы включить в сортировку первую строку данных (так как она не является заголовком столбца), на вкладке Главная в группе Редактирование нажмите кнопку Сортировка и фильтр, выберите команду Настраиваемая сортировка и снимите флажок Мои данные содержат заголовки.

Сортировка данных по убыванию и возрастанию — learn-office

Предположим, что мы подготовили отчет по продажам и финансовым результатам по каналам продаж и менеджерам следующего вида:

Глаза разбегаются, правда? Для того, чтобы было легче читать эту таблицу, определимся с тем, какая информация для нас существенна, а какая нет.

Будем считать, что в данный момент нас интересует только выручка и полученная прибыль. Причем мы хотим отсортировать клиентов по убыванию этих показателей, чтобы оценить эффективность работы.

Сразу отметим 2 важных момента.

1. Как правило, таблицы такого рода создаются с помощью формул. До проведения сортировки нужно обязательно убрать все формулы из всех ячеек, иначе провести операцию просто не удастся, а если и удастся, то все значения изменятся, т.к. формулы будут ссылаться на совершенно другие ячейки, чем должны.

2. Если в дальнейшем нам понадобится убрать сортировку и вернуться к прежнему виду таблицы, следует позаботиться об этом на данном этапе. Пронумеруем строки первоначальной таблицы на случай, если захотим вернуться к ней, и тогда у нас будет возможность отсортировать строки по нумерации.

Как убрать формулы из всех ячеек листа

Для того, чтобы одновременно убрать все формулы нужно:

1. Выделить всю область листа, для чего необходимо нажать левой клавишей мыши на самый верхний левый угол серого поля:

2. Скопировать выделенную область (не снимая выделения области, правой кнопкой мыши вызываем меню и выбираем «Копировать»)

3. Воспользоваться специальной вставкой (не снимая выделения области, правой кнопкой мыши вызываем меню и выбираем «Специальная вставка» -> «значения»)

Ну, а теперь можно удалить или скрыть лишние столбцы, не боясь изменения отчета.

Прежде чем приступить непосредственно к сортировке, нужно проверить, чтобы сортируемая таблица не содержала объединенных ячеек в шапке или другом месте. В таком случае Excel будет ругаться и писать: «Для этого требуется, чтобы ячейки имели одинаковый размер».

Если Вы не намерены снимать объединение ячеек шапки и менять таблицу, можно перенести сортируемый столбик в левый крайний ряд и отсортировать его с помощью кнопочек сортировки.

Например, мы хотим отсортировать таблицу по убыванию выручки. Выделяем сортируемые строки по серому полю без шапки и нажимаем на «Сортировку по убыванию»:


ВНИМАНИЕ: Это касается только объединенных ячеек в шапке. Если внутри таблицы есть объединенные ячейки, Excel не будет сортировать такие строки. Придется снимать объединение.

Если же таблица не содержит объединенных ячеек, можно провести сортировку непосредственно внутри таблицы без переноса сортируемого столбца.

Для этого выделяем всю область таблицы вместе с шапкой, находим в главном меню «Данные» и выбираем «Сортировку»:

В выпавшем окне Excel предложит сделать сортировку по всем показателям, перечисленным в шапке. Мы выберем «Чистую прибыль»:

С помощью полученного рейтинга мы наглядно сможем видеть, какие менеджеры и клиенты приносят компании больше прибыли.

Если же мы совместим данный вид сортировки с сортировкой через автофильтр, мы сможем отсортировать данные по отделам, менеджерам и клиентам. Добавим столбец для сортировки и отсортируем данные по менеджерам:

Как видим, в результате у нас получился удобный отчет, который очень наглядно демонстрирует, кто из менеджеров приносит больше всего прибыли, а кто работает с нерентабельными клиентами.

Сортировка данных в SQL, оператор order by

При выполнении SELECT запроса, строки по умолчанию возвращаются в неопределенном порядке. Фактический порядок строк в этом случае зависит от плана соединения и сканирования, а также от порядка расположения данных на диске, поэтому полагаться на него нельзя. Для упорядочивания записей используется конструкция ORDER BY.

Общая структура запроса с оператором ORDER BY

MySQL
SELECT поля_таблиц FROM список_таблиц
ORDER BY столбец_1 [ASC | DESC][, столбец_n [ASC | DESC]];

В описанной структуре запроса необязательные параметры указаны в квадратных скобках.

  • DESC — сортировка по убыванию
  • ASC (по умолчанию) — сортировка по возрастанию

Сортировка по нескольким столбцам

Для сортировки результатов по двум или более столбцам их следует указывать через запятую.

MySQL
SELECT поля_таблиц FROM список_таблиц
ORDER BY столбец_1 [ASC | DESC], столбец_2 [ASC | DESC];

Данные будут сортироваться по первому столбцу, но в случае если попадаются несколько записей с совпадающими значениями в первом столбце, то они сортируются по второму столбцу. Количество столбцов, по которым можно отсортировать, не ограничено.

Правило сортировки применяется только к тому столбцу, за которым оно следует.

ORDER BY столбец_1, столбец_2 DESC

не то же самое, что

ORDER BY столбец_1 DESC, столбец_2 DESC

Примеры использования

Выведем названия авиакомпаний в алфавитном порядке из таблицы Company:

MySQL
SELECT name FROM Company
ORDER BY name;

Сортировка строковых данных осуществляется в лексикографическом (алфавитном) порядке.

Выведем всю информацию о полетах, отсортированную по времени вылета самолета в порядке возрастания и по времени прилета в аэропорт в порядке убывания, из таблицы Trip:

MySQL
SELECT * FROM Trip
ORDER BY time_out, time_in DESC;

В данном примере в начале отсортировывается информация по времени вылета. Затем там, где время вылета совпадает, отсортировывается по времени прилёта.

Выведем все данные о покупках, совершенных Headley Quincey, отсортировав их в порядке убывания стоимости товаров:

1. Сначала нужно узнать идентификатор Headley Quincey в таблице FamilyMembers:

MySQL
SELECT member_id from FamilyMembers
WHERE member_name = 'Headley Quincey';

2. Выведем все данные о покупках, совершенных Headley Quincey, из таблицы Payments:

MySQL
SELECT * FROM Payments
WHERE family_member = (
    SELECT member_id from FamilyMembers
    WHERE member_name = 'Headley Quincey'
);

3. Отсортируем получившиеся данные в порядке убывания стоимости товара:

MySQL
SELECT * FROM Payments
WHERE family_member = (
    SELECT member_id from FamilyMembers
    WHERE member_name = 'Headley Quincey'
) ORDER BY unit_price DESC;

Сортировка данных в Excel

Если данные текстовые, их можно отсортировать по алфавиту («от А до Я» или «от Я до А»).  Если данные числовые, их можно отсортировать в порядке возрастания или убывания. Если в диапазоне данных есть строка или столбец, в которых содержатся данные типа время или дата, их можно отсортировать в прямом или обратном хронологическом порядке. Имеется также возможность сортировки предварительно отформатированных данных по элементам этого форматирования.

Сортировать данные можно по одному условию (например, сортировка списка сотрудников по фамилии) или нескольким (например, сортировка списка сотрудников по занимаемой должности, а внутри каждой должности фамилии отсортировать в алфавитном порядке).  Данные можно сортировать по столбцу (или нескольким столбцам) или по строке.

Сортировка по одному критерию

Пошаговые действия:

  1. В столбце, по которому должна быть выполнена сортировка, нужно выделить любую ячейку (весь столбец выделять не надо).
  2. На вкладке Данные [Data] найти группу команд Сортировка и фильтр [Sort&Filter].

  1. Выбрать нужную кнопку: – сортировка по возрастанию или  сортировка по убыванию.

Отметим, что буквы на этой кнопке указывают только на направление сортировки, а вид кнопки остается один и тот же и при текстовых, и при числовых данных.

Существует и другой удобный способ сортировки данных: щелкнув правой кнопкой мыши по ячейке столбца, по которому будет выполняться сортировка, в контекстном меню выбрать пункт Сортировка [Sort], а далее – требуемый вариант сортировки.

Многоуровневая сортировка

Пошаговые действия:

  1. Выделить одну ячейку из сортируемого массива данных.

Если диапазоне данных имеются пустые столбцы или строкой, то Excel автоматически воспринимает их как границы сортируемого массива данных. В таком случае следует выделить все данные, подлежащие сортировке.

  1. На вкладке Данные [Data] найти группу команд Сортировка и фильтр [Sort&Filter] и на ней выбрать команду Сортировка [Sort]. 
  2. Последовательно задать уровни сортировки (определяемые именем столбца). 

Нажимая на стрелку возле трех полей (Столбец, Сортировка, Порядок) необходимо выбрать: 

  1. Имя столбца для сортировки.
  2. Тип критерия (в зависимости от того, будет ли вестись сортировка по значениям данных в столбце, или по оформлению ячейки, или по значку ячейки).
  3. Порядок сортировки (по убыванию или по возрастанию).

Если выбранный для сортировки столбец содержит названия месяцев или дней недели, то в списке поля Порядок можно выбрать опцию Настраиваемый список и в новом окне отметить один из предлагаемых вариантов сортировки.

Сортировка по форматированию

Часто для анализа данных делается заливка ячеек (или шрифта) цветом. С помощью сортировки можно также упорядочивать данные на основе их форматирования.

Пошаговый порядок действий:

  1. Щелкнуть по любой ячейки из столбца, по которому будет выполняться сортировка.
  2. На вкладке Данные [Data] выбрать группу Сортировка и фильтр [Sort&Filter], а затем выбрать команду Сортировка [Sort].
  3. В поле Столбец [Column] укажите столбец по которому будет проводиться сортировка.
  4. В поле Сортировка [Sort On] из всплывающего меню выбрать критерий сортировки: цвет ячейки, цвет шрифта или значок ячейки.
  5. Поле Порядок [Order] содержит два выпадающих списка. В первом нужно выбрать тип критерия, а во втором – размещение ячеек, отсортированных по данному критерию (строку Сверху [On Top] или Снизу [On Bottom]).
  6. При необходимости добавить еще один критерий сортировки, в окне Сортировка нужно выбрать кнопку Добавить уровень.

Можно также воспользоваться командой «Копировать уровень» [Copy Level], заменив в поле «Порядок» прежнее значение на новое.

  1. После выбора сортировки нажать кнопку ОК.

сортировка через sort() и sorted(), сортировка по ключам

Язык Python предоставляет довольно гибкий механизм для сортировки элементов упорядоченных коллекций. И реализуется, в основном, или встроенным методом списков

sort()

или функцией

sorted()

для всех остальных типов коллекций. Давайте вначале посмотрим на отличие в их вызовах. Если у нас имеется какой-либо упорядоченный список:

то этот объект имеет встроенный метод sort, который меняет его состояние и расставляет элементы по возрастанию:

Получим измененный список:

[-45, -4, 1, 2, 3, 100]

А вот коллекции кортежи или строки:

b=("ab", "bc", "wd", "gf")
c = "hello world"

не имеют такого встроенного метода и попытка их отсортировать, записав:

приведет к ошибке. Для их сортировки как раз и можно воспользоваться второй функцией sorted:

на выходе получим упорядоченный список

[‘ab’, ‘bc’, ‘gf’, ‘wd’]

Обратите внимание, чтобы мы не передавали в качестве аргумента функции sorted, на выходе будем получать именно список отсортированных данных. В данном случае передаем кортеж, а получаем – список.

Или же, со строкой:

результатом будет упорядоченная коллекция из символов:

[‘ ‘, ‘d’, ‘e’, ‘h’, ‘l’, ‘l’, ‘l’, ‘o’, ‘o’, ‘r’, ‘w’]

Причем, эта функция не меняет исходные коллекции b и c, она возвращает новый список с отсортированными данными. В то время как метод sort для списка меняет этот список. Вот на это следует также обращать внимание. То есть, если нам нужно сохранить результат сортировки в переменной, это делается так:

и res будет ссылаться на список:

[‘ab’, ‘bc’, ‘gf’, ‘wd’]

Также следует иметь в виду, что сортировка данных возможна для однотипных элементов: или чисел, или строк, или кортежей, но не их комбинаций. Например, вот такой список:

a=[1,-45,3,2,100,-4, "b"]

отсортировать не получится:

возникнет ошибка, что строку нельзя сравнивать с числом. И то же самое с функцией sorted:

Если уберем последний элемент:

то все будет работать:

И этот пример также показывает, что список можно сортировать и с помощью метода sort и с помощью функции sorted. Разница только в том, что метод sort не создает новой коллекции, а меняет уже существующую. Функция же sorted не меняет исходную коллекцию, а создает новую с отсортированными элементами. Поэтому, для изменения коллекции a здесь следует записывать такую конструкцию:

Оба этих подхода к сортировке поддерживают необязательный параметр

reverse = True/False

который определяет порядок сортировки: по возрастанию (False) или по убыванию (True). По умолчанию стоит значение reverse=False. Если мы запишем его вот так:

a = sorted(a, reverse=True)

то получим сортировку по убыванию:

[100, 3, 2, 1, -4, -45]

И то же самое с методом sort:

Своя сортирующая функция

Язык Python позволяет создавать свои сортирующие функции для более точной настройки алгоритма сортировки. Давайте для начала рассмотрим такой пример. Пусть у нас имеется вот такой список:

и мы хотим, чтобы вначале стояли четные элементы, а в конце – нечетные. Для этого создадим такую вспомогательную функцию:

def funcSort(x):
    return x%2

И укажем ее при сортировке:

print( sorted(a, key=funcSort) )

Мы здесь используем именованный параметр key, который принимает ссылку на сортирующую функцию. Запускаем программу и видим следующий результат:

[4, 6, 2, 1, 3, 5]

Разберемся, почему так произошло. Смотрите, функция funcSort возвращает вот такие значения для каждого элемента списка a:

И, далее, в sorted уже используются именно эти значения для сортировки элементов по возрастанию. То есть, сначала, по порядку берется элемент со значением 4, затем, 6 и потом 2. После этого следуют нечетные значения в порядке их следования: 1, 3, 5. В результате мы получаем список:

[4, 6, 2, 1, 3, 5]

А теперь, давайте модифицируем нашу функцию, чтобы выполнялась сортировка и самих значений:

def funcSort(x):
    if x%2 == 0:
        return x
    else:
        return x+100

Здесь четные значения возвращаются такими как они есть, а к нечетным прибавляем 100. В результате получим:

[2, 4, 6, 1, 3, 5]

Здесь элементам нашего списка ставятся в соответствие указанные числа, и по этим числам выполняется их сортировка. То есть, эти числа можно воспринимать как некие ключи, по которым и происходит сортировка элементов списка. Поэтому в Python такую сортировку называют сортировкой по ключам.

Конечно, здесь вместо определения своей функции можно также записывать анонимные функции, например:

print( sorted(a, key=lambda x: x%2) )

Получим ранее рассмотренный результат:

[4, 6, 2, 1, 3, 5]

Или, то же самое можно делать и со строками:

lst = ["Москва", "Тверь", "Смоленск", "Псков", "Рязань"]

Отсортируем их по длине строки:

print( sorted(lst, key=len) )

получим результат:

[‘Тверь’, ‘Псков’, ‘Москва’, ‘Рязань’, ‘Смоленск’]

Или по последнему символу, используя лексикографический порядок:

print( sorted(lst, key=lambda x: x[-1]) )

[‘Москва’, ‘Псков’, ‘Смоленск’, ‘Тверь’, ‘Рязань’]

Или, по первому символу:

print( sorted(lst, key=lambda x: x[0]) )

[‘Москва’, ‘Псков’, ‘Рязань’, ‘Смоленск’, ‘Тверь’]

И так далее. Этот подход часто используют при сортировке сложных структур данных. Допустим, у нас имеется вот такой список из книг:

books = {
("Евгений Онегин", "Пушкин А.С.", 200),
("Муму", "Тургенев И.С.", 250),
("Мастер и Маргарита", "Булгаков М.А.", 500),
("Мертвые души", "Гоголь Н.В.", 190)
}

И нам нужно его отсортировать по возрастанию цены (последнее значение). Это можно сделать так:

print( sorted(books, key=lambda x: x[2]) )

На выходе получим список:

[(‘Мертвые души’, ‘Гоголь Н.В.’, 190), (‘Евгений Онегин’, ‘Пушкин А.С.’, 200), (‘Муму’, ‘Тургенев И.С.’, 250), (‘Мастер и Маргарита’, ‘Булгаков М.А.’, 500)]

Вот так можно выполнять сортировку данных в Python.

Задания для самоподготовки

1. Используя сортировку, найдите первые три наименьшие значения в списке:

a=[1,2,-5,0,5,10]

Сам список должен оставаться неизменным.

2. Отсортируйте список:

digs = (-10, 0, 7, -2, 3, 6, -8)

так, чтобы сначала шли отрицательные числа, а затем, положительные.

3. Пусть имеется словарь:

{‘+7’: 2345678901, ‘+4’: 3456789012, ‘+5’: 5678901234, ‘+12’: 78901234}

Необходимо вывести телефонные номера по убыванию чисел, указанных в ключах, то есть, в порядке:

+4, +5, +7, +12

массивов — Использование sort () для убывания вместо возрастания C ++

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

Сортировка строк в порядке убывания в Javascript (наиболее эффективно)?

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

json — Сортировка по убыванию по нескольким ключам в jq

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

iphone — Сортировка NSArray в порядке убывания

Переполнение стека
  1. Около
  2. Продукты
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *