Чтобы усовершенствовать программный код, добавить в него новые важные функции используются разнообразные методы. К ним относится: создание списков, кортежей или словарей. В данной статье рассмотрим, когда используются, чем они отличаются, как создать и как работать с кортежами в Python 3.
Что такое кортеж
Кортеж – это неизменная структура заданных заранее значений. Он очень похож на список, но последний подвержен изменениям. Так, если нужно исправить какой-то элемент списка, можно сделать это, напрямую указав:
b = [4, 6, 8] print(b) [4, 6, 8] b[1] = 13 print(b) [4, 13, 8]
Если же записать подобный код, но попытаться применить его к кортежу, ничего не выйдет, а на экране появится надпись об ошибке. Считается, что это важно, поскольку таким образом данные невозможно будет изменить как случайно, так и намеренно. Также в python добавление элемента в кортеж невозможно. Правда можно привести его в список, добавить элемент. После этого полученный список преобразовать обратно.
Выгодное преимущество кортежа состоит также в том, что он имеет меньший размер, что проверяется применением команды sizeof. Она показывает, сколько занимает объект в байтах:
a = (2, 4, 6, 8, 10, 12) b = [2, 4, 6, 8, 10, 12] a.__sizeof__() 36 b.__sizeof__() 44
Из этого кода видно, что кортеж (в круглых скобках) занимает 36 байтов, а список (в квадратных скобках) – 44 байта.
Создание
Кортеж определяется точно так же, как и список, однако перечисление происходит в круглых, а не квадратных скобках. Элементы будут стоять в определенном порядке, а их нумерация всегда начинается с нуля. А точнее для непустого кортежа первым элементом будет являться ноль. Отрицательный индекс позволит отсчитывать все с конца (с правой стороны).
Приведем пример создания в Python обычного кортежа:
a = (1,2,3)
Можно преобразовать список в кортеж следующим образом:
a = tuple([1,2,3])
Рассмотрим кортеж с отрицательным индексом:
n = ("a", "b", "с", "d", "e") print(n[-1]) 'e'
То есть на экране отобразился первый не с начала, а с конца элемент.
Чтобы создать кортеж с одним элементом, нужно сделать такую запись:
a =(3,) print(a[0]) 3
Нужно обратить особое внимание на то, что даже если элемент один, после него все равно должна стоять запятая.
Иногда для создания кортежей используются генераторы. Обычно они служат, чтобы компактно и удобно создать необходимую коллекцию элементов. Приведем пример:
a = tuple(i for i in range(0, 10)) print(a) (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Выше представлен генератор кортежа. То есть мы создали генератор. После этого преобразовали его к кортежу с помощью ключевого слова tuple.
[su_sovet]Помните, что к генератору нельзя применить срезы. Если потребуется — то можно привести генератор к кортежу и только потом сделать срез. [/su_sovet]
Подробнее о срезах описано ниже в пункте «Обращение к элементу».
Использование генераторов кортежей аналогично генераторам списка.
Обращение к элементу
У каждого элемента есть свой индекс. То есть, в Python для обращения к элементу кортежа, нужно просто указать его индекс. Напомним, что счет начинается с нуля. Посмотрим на код:
b = (4, 6, 8) print(b[0]) print(b[1]) 4 6
Из кортежа можно извлечь как элемент, так и срез. В этом случае мы получим кортеж, состоящий из элементов, расположенных в промежутке среза. Следует уточнить, что при указании среза используются не номера элементов, а номера промежутков между ними. Перед первым элементом находится промежуток с индексом 0. Рассмотрим пример:
b = (5, 3.6, "квадрат", 15, 'В') print(b[1]) print(b[2:4]) 3.6 ('квадрат', 15)
Методы
Кортежи в python имеют только два метода: index() и count(). Первый применяется, чтобы узнать, какой индекс у определенного элемента. Например:
a = (32, 33, 34, 33, 34, 33) print(a.index(33)) 1
Элементов «33» в кортеже несколько, но на экран будет выведен индекс первого из них.
Метод count используется, если нужно узнать, сколько определенных элементов имеется в кортеже.
a = (32, 33, 34, 33, 34, 33) print(a.count(33)) 3
На экране перед пользователем появится именно число 3, потому что в кортеже искомое число 33 повторяется 3 раза.
Помните, что в кортежах нет методов добавления и удаления элементов.
Именованные кортежи
Данный класс не получил широкого применения среди программистов, хотя он и является достаточно важным и полезным. Именованные кортежи в python (или namedtuple) в каком-то смысле являются расширениями для обычных. Так, огромной проблемой считается то, что получать данные из кортежа можно только при помощи числовых индексов. А что делать, если хочется для наглядности кода обращаться к элементам, используя строковое наименование. Такое обращение значительно улучшит читаемость кода. Для этого на помощь приходит namedtuple.
Для того, чтобы использовать namedtuple, необходимо подключить библиотеку collections. Это делается с помощью import collecions *
. В этом случае обращаться к namedtuple будет необходимо следующим образом: collections.namedtuple( [параметры] )
. Другой вариант подключения библиотеки приведен в примере ниже.
Каждый элемент, сохраненный в именованном кортеже, доступен через определенный идентификатор. Посмотрим на примере кода:
from collections import namedtuple Flower = namedtuple('Flower' , 'color cost comment') rose = Flower('red', 5, 'beautiful') print(rose.cost) 5
Наименования полей были перечислены через пробел. Вместо этой строки можно было передать список со строками. В конструкторе namedtuple разобьет полученную строку с помощью split. В качестве примера было приведено обращение к элементу cost. К остальным обращение аналогично: rose.color
, rose.comment
.
Таким образом, именованный кортеж делает вид программного кода более читаемым. Так, в вышеуказанном коде можно увидеть наименования color, cost и comment. И при всем при этом, сохраняется возможность обращения к элементам по индексу, например дописав к предыдущему коду:
print(rose[0]) red
Список кортежей
Иногда бывают задачи, в которых нужно хранить таблицы с данными, которые называются матрицами (или двумерными массивами). Для работы с массивами используется библиотека array. К сожалению, не получится с ее помощью сделать массив кортежей. Потому что элементом массива не может быть кортеж.
Из этой ситуации есть выход — создание в Python списка кортежей. Вариант объявления такого списка представлен ниже:
a = [(1,2,3),(4,5,6)]
Cортировка
Иногда нужно отсортировать имеющиеся элементы списка. Благодаря встроенной функции sorted, все это делается достаточно легко:
a = ('One', 'Two', 'Three') a = tuple(sorted(a)) print(a) ('One', 'Three', 'Two')
Видно, что произошла сортировка кортежа Python по алфавиту. Стандартную сортировку можно провести и по числовым элементом. Посмотрим на пример:
a = (3, 1, 5 ,2, 6, 7) a = tuple(sorted(a)) print(a) (1, 2, 3, 5, 6, 7)
Заметим, что произошла сортировка по возрастанию.
[su_sovet]Обратите внимание, что функция sorted возвращает список, но с помощью tuple мы приводим результат сортировки к кортежу.[/su_sovet]
В список
Кортеж можно переделать в список:
a = (1,2,3) a = list(a) print(a) [1, 2, 3]
Таким образом, кортеж был преобразован в список Python, который можно изменить. Теперь рассмотрим обратное действие — преобразование списка в кортеж:
a = [1, 2.6, "квадрат"] a = tuple(a) print(a) (1, 2.6, "квадрат")
В словарь
Словарь – это еще одна структура используемая в Python. Он, как и список, является изменяемым, но при этом неупорядоченным. Это значит, что обратиться к определенному элементу посредством указания индекса – не получится. Чтобы лучше понять, можно провести аналогию с обычным англо-русским словарем. В нем для каждого слова есть перевод: house –дом, flat – квартира, window – окно. Если перенести такую структуру в программный код, то получится такая запись, оформляемая фигурными скобками:
{'house': 'дом', 'flat': 'квартира', 'window': 'окно'}
Последовательность пар при выводе на экран не определяется никаким правилом, отображаются они в произвольном порядке.
Для того, чтобы в Python преобразовать кортеж в словарь, необходимо использовать приведение типов с помощью dict.
a = (('a', 2),('b', 4)) a = dict(a) print(a) {'a': 2, 'b': 4}
Как видно, для создания словаря понадобился кортеж кортежей. Причем вложенные кортежи состоят из двух элементов каждый. Иначе не получается провести преобразование к словарю.
В строку
Чтобы вывести в python кортеж в одну строку, используется функция join. Посмотрим на примере:
a = ('one','two','three') b = ''.join(a) c = ','.join(a) print(b) print(c) onetwothree one,two,three
После выполнения кода на дисплее появится запись всех элементов в одну строку с указанным разделителем. В первом случае — без пробелов, а во втором случае — через запятую.
Чем же кортежи удобнее? Работа с ними проходит быстрее, чем, например, со списками. Если программисту нужно определить постоянный набор значений, чтобы затем их перебирать, то лучше будет сделать это с его помощью. Плюс – это экономия оперативной памяти, так как они занимают меньше места, чем списки.