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

22. Конкатенация и сортировка списков в 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 (о параметрах функции поговорим в уроке 13.7) для указания функции, которая будет вызываться для каждого элемента до сравнения. Мы забежали немного вперед, если вам не понятно, о чем идет речь, ничего страшного, можете опустить это и вернуться к этому уроку позднее. Например, вам нужно отсортировать список, в котором слова имеют буквы с разными регистрами:

Пример
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Знакомство с Python
Первое знакомство с PythonЗнакомство с Python
Основы функций в PythonЗнакомство с Python
Обработка исключений (try/except) в PythonЗнакомство с Python
Методы и особенности множеств в PythonЗнакомство с Python
Структуры данных в PythonЗнакомство с Python
Работа с файлами в Python Знакомство с Python
Условная инструкция if-elif-else в PythonЗнакомство с Python
Внутреннее устройство и сортировка словаря в PythonЗнакомство с Python
<
×
>
Раздел «Знакомство с Python»
1. УРОК: Первое знакомство с Python
2. ТЕСТ: Небольшой первый тест по Python
3. УРОК: Переменные и комментарии в Python
4. ТЕСТ: Тест по основным понятиям и работе с сайтом
5. УРОК: Погружение в Python
6. ТЕСТ: Второй вводный тест по Python
7. УРОК: Типы данных в Python
8. УРОК: Форматирование строк в Python
9. УРОК: Условная инструкция if-elif-else в Python
10. УРОК: Преобразование и проверка типов в Python
11. УРОК: Вызов методов цепочкой в Python
12. УРОК: Первое знакомство с циклами в Python
13. ТЕСТ: Тест по циклам Python
14. УРОК: Генерируем случайные числа на Python
15. ТЕСТ: Тест по модулю random Python
16. УРОК: Структуры данных в Python
17. ТЕСТ: Тест по структурам Python
18. УРОК: Списки в Python
19. ТЕСТ: Тест по спискам Python
20. УРОК: Изменение списка на месте в Python
21. УРОК: Дополнительно про списки в Python
УРОК 22. Конкатенация и сортировка списков в Python
Вы здесь
23. ТЕСТ: Заключительный тест по спискам в Python
24. УРОК: Словари в Python
25. ТЕСТ: Тест по словарям Python
26. УРОК: Словари и списки: еще глубже
27. УРОК: Перебор элементов словаря в Python
28. УРОК: Внутреннее устройство и сортировка словаря в Python
29. УРОК: Методы словарей и функция len() в Python
30. ТЕСТ: Заключительный тест по словарям
31. УРОК: Множества в Python
32. УРОК: Методы и особенности множеств в Python
33. УРОК: Отношения между множествами и операции над ними
34. ТЕСТ: Тест по методам множеств в Python
35. ТЕСТ: Тест по операциям над множествами в Python
36. УРОК: Кортежи в Python
37. УРОК: Более подробно о кортежах в Python
38. ТЕСТ: Тест по кортежам в Python
39. УРОК: Контроль хода выполнения программы в Python
40. УРОК: Цикл while в Python
41. УРОК: Операторы break, continue и pass в Python
42. УРОК: Циклы for/else и while/else в Python
43. УРОК: Обработка исключений (try/except) в Python
44. ТЕСТ: Тест по циклам и управляющим конструкциям
45. ТЕСТ: Тест по обработке исключений
46. УРОК: Работа с файлами в Python
47. УРОК: Оператор with/as для работы с файлами в Python
48. ТЕСТ: Тест по работе с файлами в Python
49. УРОК: Итераторы в Python
50. УРОК: List/dict/set comprehensions (включения) в Python
51. ТЕСТ: Тест по включениям в Python
52. УРОК: Основы функций в Python
53. ТЕСТ: Тест по основам функций в Python
54. УРОК: Область видимости в Python
55. ТЕСТ: Тест по области видимости в Python
56. УРОК: Замыкания и оператор nonlocal в Python
57. ТЕСТ: Тест по замыканиям и nonlocal в Python
58. УРОК: Аргументы и параметры функций, операторы * и ** в Python
59. ТЕСТ: Тест по аргументам и параметрам функций в Python
60. ТЕСТ: Тест по операторам * и ** в Python
61. УРОК: Что дальше?
Впервые на сайте Codebra?

Извините за это всплывающее окно, меня они тоже раздражают.

Образовательный ресурс codebra.ru полностью посвящен программированию. Все курсы и уроки находятся на главной странице. Ради интереса можете посмотреть на содержимое курсов по Python, HTML и CSS, JavaScript, C++ и другие, размещенные на главной странице.

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

Удачи в обучении!

Закрыть окно