Python кортеж
Чтобы усовершенствовать программный код, добавить в него новые важные функции используются разнообразные методы. К ним относится: создание списков, кортежей или словарей. В данной статье рассмотрим, когда используются, чем они отличаются, как создать и как работать с кортежами в Python 3.
Что такое кортеж
Кортеж – это неизменная структура заданных заранее значений. Он очень похож на список, но последний подвержен изменениям. Так, если нужно исправить какой-то элемент списка, можно сделать это, напрямую указав:
Если же записать подобный код, но попытаться применить его к кортежу, ничего не выйдет, а на экране появится надпись об ошибке. Считается, что это важно, поскольку таким образом данные невозможно будет изменить как случайно, так и намеренно. Также в python добавление элемента в кортеж невозможно. Правда можно привести его в список, добавить элемент. После этого полученный список преобразовать обратно.
Выгодное преимущество кортежа состоит также в том, что он имеет меньший размер, что проверяется применением команды sizeof. Она показывает, сколько занимает объект в байтах:
Из этого кода видно, что кортеж (в круглых скобках) занимает 36 байтов, а список (в квадратных скобках) – 44 байта.
Создание
Кортеж определяется точно так же, как и список, однако перечисление происходит в круглых, а не квадратных скобках. Элементы будут стоять в определенном порядке, а их нумерация всегда начинается с нуля. А точнее для непустого кортежа первым элементом будет являться ноль. Отрицательный индекс позволит отсчитывать все с конца (с правой стороны).
Приведем пример создания в Python обычного кортежа:
Можно преобразовать список в кортеж следующим образом:
Рассмотрим кортеж с отрицательным индексом:
То есть на экране отобразился первый не с начала, а с конца элемент.
Чтобы создать кортеж с одним элементом, нужно сделать такую запись:
Нужно обратить особое внимание на то, что даже если элемент один, после него все равно должна стоять запятая.
Иногда для создания кортежей используются генераторы. Обычно они служат, чтобы компактно и удобно создать необходимую коллекцию элементов. Приведем пример:
Выше представлен генератор кортежа. То есть мы создали генератор. После этого преобразовали его к кортежу с помощью ключевого слова tuple.
Подробнее о срезах описано ниже в пункте «Обращение к элементу».
Использование генераторов кортежей аналогично генераторам списка.
Обращение к элементу
У каждого элемента есть свой индекс. То есть, в Python для обращения к элементу кортежа, нужно просто указать его индекс. Напомним, что счет начинается с нуля. Посмотрим на код:
Из кортежа можно извлечь как элемент, так и срез. В этом случае мы получим кортеж, состоящий из элементов, расположенных в промежутке среза. Следует уточнить, что при указании среза используются не номера элементов, а номера промежутков между ними. Перед первым элементом находится промежуток с индексом 0. Рассмотрим пример:
Методы
Кортежи в python имеют только два метода: index() и count(). Первый применяется, чтобы узнать, какой индекс у определенного элемента. Например:
Элементов «33» в кортеже несколько, но на экран будет выведен индекс первого из них.
Метод count используется, если нужно узнать, сколько определенных элементов имеется в кортеже.
На экране перед пользователем появится именно число 3, потому что в кортеже искомое число 33 повторяется 3 раза.
Помните, что в кортежах нет методов добавления и удаления элементов.
Именованные кортежи
Данный класс не получил широкого применения среди программистов, хотя он и является достаточно важным и полезным. Именованные кортежи в python (или namedtuple) в каком-то смысле являются расширениями для обычных. Так, огромной проблемой считается то, что получать данные из кортежа можно только при помощи числовых индексов. А что делать, если хочется для наглядности кода обращаться к элементам, используя строковое наименование. Такое обращение значительно улучшит читаемость кода. Для этого на помощь приходит namedtuple.
Для того, чтобы использовать namedtuple, необходимо подключить библиотеку collections. Это делается с помощью import collecions * . В этом случае обращаться к namedtuple будет необходимо следующим образом: collections.namedtuple( [параметры] ) . Другой вариант подключения библиотеки приведен в примере ниже.
Каждый элемент, сохраненный в именованном кортеже, доступен через определенный идентификатор. Посмотрим на примере кода:
Наименования полей были перечислены через пробел. Вместо этой строки можно было передать список со строками. В конструкторе namedtuple разобьет полученную строку с помощью split. В качестве примера было приведено обращение к элементу cost. К остальным обращение аналогично: rose.color , rose.comment .
Таким образом, именованный кортеж делает вид программного кода более читаемым. Так, в вышеуказанном коде можно увидеть наименования color, cost и comment. И при всем при этом, сохраняется возможность обращения к элементам по индексу, например дописав к предыдущему коду:
Список кортежей
Иногда бывают задачи, в которых нужно хранить таблицы с данными, которые называются матрицами (или двумерными массивами). Для работы с массивами используется библиотека array. К сожалению, не получится с ее помощью сделать массив кортежей. Потому что элементом массива не может быть кортеж.
Из этой ситуации есть выход — создание в Python списка кортежей. Вариант объявления такого списка представлен ниже:
Cортировка
Иногда нужно отсортировать имеющиеся элементы списка. Благодаря встроенной функции sorted, все это делается достаточно легко:
Видно, что произошла сортировка кортежа Python по алфавиту. Стандартную сортировку можно провести и по числовым элементом. Посмотрим на пример:
Заметим, что произошла сортировка по возрастанию.
В список
Кортеж можно переделать в список:
Таким образом, кортеж был преобразован в список Python, который можно изменить. Теперь рассмотрим обратное действие — преобразование списка в кортеж:
В словарь
Словарь – это еще одна структура используемая в Python. Он, как и список, является изменяемым, но при этом неупорядоченным. Это значит, что обратиться к определенному элементу посредством указания индекса – не получится. Чтобы лучше понять, можно провести аналогию с обычным англо-русским словарем. В нем для каждого слова есть перевод: house –дом, flat – квартира, window – окно. Если перенести такую структуру в программный код, то получится такая запись, оформляемая фигурными скобками:
Последовательность пар при выводе на экран не определяется никаким правилом, отображаются они в произвольном порядке.
Для того, чтобы в Python преобразовать кортеж в словарь, необходимо использовать приведение типов с помощью dict.
Как видно, для создания словаря понадобился кортеж кортежей. Причем вложенные кортежи состоят из двух элементов каждый. Иначе не получается провести преобразование к словарю.
В строку
Чтобы вывести в python кортеж в одну строку, используется функция join. Посмотрим на примере:
После выполнения кода на дисплее появится запись всех элементов в одну строку с указанным разделителем. В первом случае — без пробелов, а во втором случае — через запятую.
Чем же кортежи удобнее? Работа с ними проходит быстрее, чем, например, со списками. Если программисту нужно определить постоянный набор значений, чтобы затем их перебирать, то лучше будет сделать это с его помощью. Плюс – это экономия оперативной памяти, так как они занимают меньше места, чем списки.
Источник
Кортежи и операции с ними
На этом занятии мы познакомимся с еще одной коллекцией данных в Python – словарем. В отличие от списков
Кортеж – это упорядоченная неизменяемая коллекция произвольных данных.
Для задания кортежа достаточно перечислить значения через запятую:
или же, это эквивалентно такой записи:
Чтобы присвоить только одно значение кортежу, используется такой синтаксис:
то есть, последняя запятая указывает, что 1 следует воспринимать как первый элемент кортежа. Если записать просто 1, то оно будет восприниматься как обычное число.
Если записать переменные через запятую, то им можно присвоить значения из кортежа:
уже возникнет ошибка, т.к. число значений в кортеже меньше числа переменных.
Для определения длины кортежа (числа его элементов), используется уже знакомая вам функция
Далее, доступ к элементам кортежа осуществляется также как и к элементам списков:
О срезах мы подробно говорили, когда рассматривали списки, поэтому не вижу смысла дублировать здесь эту информацию. Обратите лишь внимание на то, что вот такая операция
не создает копию кортежа – это будут ссылки на один и тот же кортеж:
увидим одно и то же значение id.
Если кортежи так похожи на списки, то в чем их преимущество перед ними? Другими словами: в каких случаях следует использовать кортеж вместо списка? Во-первых, кортеж – это неизменяемый тип, то есть, мы в отличие от списков, не можем выполнять такие операции:
это приведет к ошибке. Значит, кортеж можно использовать, когда необходимо «запретить» программисту менять значения элементов списка. Во-вторых, кортежи можно использовать в качестве ключей у словарей, например, так:
В-третьих, кортеж занимает меньше памяти, чем такой же список, например:
Как видите, размер кортежа меньше, чем списка. Здесь использован метод __sizeof__, который возвращает размер данных в байтах.
И, наконец, в-четвертых, операции с кортежами выполняются быстрее, чем со списками, например, перебор элементов или доступ к отдельному элементу.
Отсюда получается такой один общий, глобальный вывод: если мы работаем с неизменяемым упорядоченным списком, то предпочтительнее использовать кортеж.
Чтобы создать пустой кортеж можно использовать такие конструкции:
Спрашивается: зачем создавать пустой кортеж, если он относится к неизменяемым типам. В действительности, мы лишь не можем менять уже существующие элементы в кортеже, но можем добавлять новые, используя оператор +:
или для добавления в начало кортежа:
Также можно добавить вложенный кортеж:
или делать дубли в кортеже:
Все эти операции вполне допустимы.
Далее, функция tuple позволяет создавать кортежи на основе любых упорядоченных списков:
И обратно, из кортежа можно сформировать список:
Также кортежи могут хранить самые разные данные:
Причем, смотрите, если обратиться, например, к списку:
то сам по себе список – это изменяемый тип, следовательно, его значение даже в кортеже мы можем спокойно менять:
То есть, неизменяемость кортежа относится к его структуре элементов и переменным
которые ссылаются на конкретные объекты. Но, если объекты могут изменяться, то это никто не запрещает делать.
Так как сам кортеж – неизменяемый объект, то удалить отдельные его элементы невозможно:
но можно удалить его целиком:
после этого кортеж a перестанет существовать.
Методы кортежа
У кортежа имеется два таких метода:
который возвращает число найденных элементов с указанным значением. Если элемент не найден:
то возвращается число 0.
возвращает индекс первого найденного элемента с указанным значением. Второй необязательный параметр
позволяет задавать индекс начала поиска элемента. В данном случае поиск будет начинаться с третьего индекса. А последний третий аргумент:
определяет индекс, до которого идет поиск (не включая его). Если же записать вот так:
то возникнет ошибка, т.к. в поиск будет включен только 3-й индекс и там нет значения 2.
Задания для самопроверки
p = («+792345678», «+792345478», «+792355678», «+592345678», «+392345678», «+7923456558»)
Нужно вывести все номера, начинающиеся с «+7».
2. Имеется набор оценок в виде строки:
«Оценки: 5, 4, 3, 4, 2, 4, 5, 4»
Необходимо создать кортеж, в котором находились бы только оценки в виде целых чисел:
(5, 4, 3, 4, 2, 4, 5, 4)
3. Вывести значения кортежа:
1 – 2 – 3
4 – 5 – 6
7 – 8 – 9
Видео по теме
#1. Первое знакомство с Python Установка на компьютер
#2. Варианты исполнения команд. Переходим в PyCharm
#3. Переменные, оператор присваивания, функции type и id
#4. Числовые типы, арифметические операции
#5. Математические функции и работа с модулем math
#6. Функции print() и input(). Преобразование строк в числа int() и float()
#7. Логический тип bool. Операторы сравнения и операторы and, or, not
#8. Введение в строки. Базовые операции над строками
#9. Знакомство с индексами и срезами строк
#10. Основные методы строк
#11. Спецсимволы, экранирование символов, row-строки
#12. Форматирование строк: метод format и F-строки
#13. Списки — операторы и функции работы с ними
#14. Срезы списков и сравнение списков
#15. Основные методы списков
#16. Вложенные списки, многомерные списки
#17. Условный оператор if. Конструкция if-else
#18. Вложенные условия и множественный выбор. Конструкция if-elif-else
#19. Тернарный условный оператор. Вложенное тернарное условие
#20. Оператор цикла while
#21. Операторы циклов break, continue и else
#22. Оператор цикла for. Функция range()
#23. Примеры работы оператора цикла for. Функция enumerate()
#24. Итератор и итерируемые объекты. Функции iter() и next()
#25. Вложенные циклы. Примеры задач с вложенными циклами
#26. Треугольник Паскаля как пример работы вложенных циклов
#27. Генераторы списков (List comprehensions)
#28. Вложенные генераторы списков
#29. Введение в словари (dict). Базовые операции над словарями
#30. Методы словаря, перебор элементов словаря в цикле
#31. Кортежи (tuple) и их методы
#32. Множества (set) и их методы
#33. Операции над множествами, сравнение множеств
#34. Генераторы множеств и генераторы словарей
#35. Функции: первое знакомство, определение def и их вызов
#36. Оператор return в функциях. Функциональное программирование
#37. Алгоритм Евклида для нахождения НОД
#38. Именованные аргументы. Фактические и формальные параметры
#39. Функции с произвольным числом параметров *args и **kwargs
#40. Операторы * и ** для упаковки и распаковки коллекций
#41. Рекурсивные функции
#42. Анонимные (lambda) функции
#43. Области видимости переменных. Ключевые слова global и nonlocal
#44. Замыкания в Python
#45. Введение в декораторы функций
#46. Декораторы с параметрами. Сохранение свойств декорируемых функций
#47. Импорт стандартных модулей. Команды import и from
#48. Импорт собственных модулей
#49. Установка сторонних модулей (pip install). Пакетная установка
#50. Пакеты (package) в Python. Вложенные пакеты
#51. Функция open. Чтение данных из файла
#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов
#53. Запись данных в файл в текстовом и бинарном режимах
#54. Выражения генераторы
#55. Функция-генератор. Оператор yield
#56. Функция map. Примеры ее использования
#57. Функция filter для отбора значений итерируемых объектов
#58. Функция zip. Примеры использования
#59. Сортировка с помощью метода sort и функции sorted
#60. Аргумент key для сортировки коллекций по ключу
#61. Функции isinstance и type для проверки типов данных
#62. Функции all и any. Примеры их использования
#63. Расширенное представление чисел. Системы счисления
#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы
#65. Модуль random стандартной библиотеки
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
Источник