Посмотреть все уроки курса
Выбрать другой урок из курса
Поиск по сайту
Теория урока

6.5. Конкатенация и сортировка списков в Python

Оглавление урока

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

Конкатенация – это операция склеивания объектов, имеющих линейную структуру, например, строк, списков, очередей, массивов и т.д. В Python склеить два списка очень просто. Для этого используется оператор + или метод extend(). Пример:

Пример
a = [1, 2, 3]
b = ['a', 'b', 'c']
a + b # => [1, 2, 3, 'a', 'b', 'c']       

Используя метод extend(), необходимо помнить, что он не возвращает новый список, а модифицирует тот, на котором был вызван. Например:

Пример
a = [1, 2, 3]
b = ['a', 'b', 'c'] 
c = a.extend(b)
a # => [1, 2, 3, 'a', 'b', 'c']
b # => ['a', 'b', 'c']
c # => None       

По конкатенации список в Python добавить больше нечего. Теперь перейдем к сортировке списков.

Сортировка списка в Python

Сортировка в Python может осуществляться при помощи функции sorted(), если объект является итерируемым. Итерируемый объект (iterable) – это объект, который может возвращать элементы по одному и из которого можно получить итератор (про итераторы поговорим намного позднее). Списки относятся к итерируемым объектам, как и словари, кортежи, строки и файлы.

Так же список имеет метод sort() (Чем отличается метод от функции, мы поверхностно разобрали в предыдущем уроке).

Чтобы вернуть список с элементами, отсортированными по возрастанию, достаточно просто вызвать функцию sorted(), в параметре которой указать список.

Пример
sorted([5, 12, 3, 6, 1, 2, 7]) # => [1, 2, 3, 5, 6, 7, 12]       

Или можно использовать метод sort(), который изменяет исходный список (в отличие от функции sorted(), которая возвращает новый и не меняет переданный список).

Пример
a = [5, 12, 3, 6, 1, 2, 7]
a.sort()
a # => [1, 2, 3, 5, 6, 7, 12]       

В дополнении к выше сказанному, метод sort() определен только для списков, в свою очередь, функция sorted() может быть применима ко всем итерируемым объектам.

Еще с версии Python 2.4. у метода sort() и функции sorted() появился необязательный параметр key для указания функции, которая будет вызываться для каждого элемента до сравнения. Мы забежали немного вперед, если вам не понятно, о чем идет речь, ничего страшного, можете опустить это и вернуться к этому уроку позднее. Например, вам нужно отсортировать список, в котором слова имеют буквы с разными регистрами:

Пример
a = ['CA', 'ba', 'Ab']
sorted(a) # =>  ['Ab', 'CA', 'ba']       

Символ C в верхнем регистре стоит перед символом b в нижнем регистре, поэтому отсортированный список получился не таким, каким мы его ожидали. В данной ситуации поможет параметр key, который будет ссылаться на метод lower строкового объекта:

Пример
a = ['CA', 'ba', 'Ab']
sorted(a, key=str.lower) # => ['Ab', 'ba', 'CA']       

Вторым полезным параметром метода sort() и функции sorted() является reverse, который говорит сам за себя. Он может быть равен True или False. Отсортируем предыдущий список по убыванию:

Пример
a = ['CA', 'ba', 'Ab']
sorted(a, key=str.lower, reverse=True)       

Это еще не все возможности сортировки в Python, о других будет рассказано позднее.

Проверка списка на пустоту

Иногда бывает необходимость проверить список на пустоту. Это можно сделать очень просто при помощи инструкции if и оператора not:

Пример
a = []
if not a:
    print('Список пуст')       

Копирование списков в Python

И последнее, про копирование списков в Python. Копирование списка при помощи оператора = таит в себе определенную особенность и, в каком-то роде, опасность. Рассмотрим пример:

Пример
a = [1, 2, 3, 4, 5]
b = a
b[0] = 5
a # => ?       

Мы создали список a, после чего скопировали его в b. Далее нулевой элемент списка b поменяли. Как будет выглядеть список a? Как прежде? Думаю, вы догадались, в чем подвох. Во второй строке осуществляется копирование не списка, а ссылки на него. Как исправить? Использовать метод copy(), который возвращает сам список, а не ссылку на него:

Пример
a = [1, 2, 3, 4, 5]
b = a.copy()
b[0] = 5
a # => [1, 2, 3, 4, 5]       

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

Пример
b = a[:]       

И более предпочтительный вариант, нежели предыдущий с использованием встроенной функции list():

Пример
b = list(a)       

В этом уроке вы узнали, что такое конкатенация и как она используется в Python. Познакомились с методом списка sort() и функцией sorted(), которая применима к итерируемым объектам. Так же узнали про копирование списков и готовы к неожиданному поведению программы при неправильном копировании.

<
×
>
Раздел «Знакомство с Python»
Урок 1.1. Первое знакомство с Python
Тест 1.2. Небольшой первый тест
Урок 1.3. Переменные и комментарии в Python
Тест 1.4. Тест по основным понятиям и работе с сайтом
Урок 2.1. Погружение в Python
Тест 2.2. Второй вводный тест по Python
Урок 2.3. Типы данных в Python
Урок 2.4. Форматирование строк в Python
Урок 2.5. Условная инструкция if-elif-else в Python
Урок 2.6. Преобразование и проверка типов в Python
Урок 2.7. Вызов методов цепочкой в Python
Урок 3.1. Первое знакомство с циклами в Python
Тест 3.2. Тест по циклам Python
Урок 4.1. Генерируем случайные числа на Python
Тест 4.2. Тест по модулю random Python
Урок 5.1. Структуры данных в Python
Тест 5.2. Тест по структурам Python
Урок 6.1. Списки в Python
Тест 6.2. Тест по спискам Python
Урок 6.3. Изменение списка на месте в Python
Урок 6.4. Дополнительно про списки в Python
Урок 6.5. Конкатенация и сортировка списков в Python
Вы здесь
Тест 6.6. Заключительный тест по спискам в Python
Урок 7.1. Словари в Python
Тест 7.2. Тест по словарям Python
Урок 7.3. Словари и списки: еще глубже
Урок 7.4. Перебор элементов словаря в Python
Урок 7.5. Внутреннее устройство и сортировка словаря в Python
Урок 7.6. Методы словарей и функция len() в Python
Тест 7.7. Заключительный тест по словарям
Урок 8.1. Множества в Python
Урок 8.2. Методы и особенности множеств в Python
Урок 8.3. Отношения между множествами и операции над ними
Тест 8.4. Тест по методам множеств в Python
Тест 8.5. Тест по операциям над множествами в Python
Урок 9.1. Кортежи в Python
Урок 9.2. Более подробно о кортежах в Python
Тест 9.3. Тест по кортежам в Python
Урок 10.1. Контроль хода выполнения программы в Python
Урок 10.2. Цикл while в Python
Урок 10.3. Операторы break, continue и pass в Python
Урок 10.4. Циклы for/else и while/else в Python
Урок 10.5. Обработка исключений (try/except) в Python
Тест 10.6. Тест по циклам и управляющим конструкциям
Тест 10.7. Тест по обработке исключений
Урок 10.8. Что дальше?