0 знаков
21. Конкатенация и сортировка списков в Python
Кратко- Конкатенация - операция склеивания объектов с линейной структурой (строки, списки, очереди, массивы и т.д.).
- В Python для конкатенации списков используются оператор
+
или методextend()
.- Сортировка списка в Python возможна с помощью функции
sorted()
или методаsort()
.- Функция
sorted()
применима ко всем итерируемым объектам, методsort()
- только для списков.- Метод
sort()
имеет необязательный параметрkey
для указания функции сравнивающей элементы.- Параметр
reverse
позволяет отсортировать список по убыванию.- Копирование списков в Python может быть выполнено с использованием оператора
=
или методаcopy()
, а также с помощью срезов.
В предыдущем уроке вы узнали про обратное индексирование и познакомились с ранее не рассмотренными методами списков. В этом уроке поговорим про конкатенацию и сортировку списков.
Конкатенация – это операция склеивания объектов, имеющих линейную структуру, например, строк, списков, очередей, массивов и т.д. В 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, о других будет рассказано позднее.
Проверка списка на пустоту в 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 и добавлять в него элементы.
Тест
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ