Списки и кортежи в Python для начинающих
Предположим, что вы составляете список гостей на свадьбу. Этот список постоянно меняется: добавились друзья семьи Дима и Света, не смогут прийти троюродные сестры со стороны жены Лида с Наташей.
Для представления таких данных из реального мира в Python отлично подходят списки. Списки — это еще один встроенный тип данных Python.
Создать, или другими словами, объявить список в Python можно двумя способами, так:
my_list = list()
my_list = []
Вернемся, однако, к гостям на свадьбе. Для создания списка гостей, сразу же при создании помещаем внутрь скобок строки с именами через запятую.
guests = ['Родители', 'Одноклассники', 'Лида и Наташа']print(guests)
Операции с элементами списка ¶
В нашем списке три элемента: «Родители», «Одноклассники», «Лида и Наташа», — которые хранятся внутри списка именно в таком порядке. Если только вы не измените порядок списка, «Родители» всегда будет первым элементом, «Одноклассники» — вторым и «Лида и Наташа» — третьим. Родители представляет собой начало списка, а Лида и Наташа — конец. Мы помним, что Лида и Наташа не смогут прийти, и их нужно удалить из списка.
С помощью метода remove можно удалить последний элемент в списке.
guests = ['Родители', 'Одноклассники', 'Лида и Наташа']print(guests) # ['Родители', 'Одноклассники', 'Лида и Наташа']guests.remove("Лида и Наташа")print(guests) # ['Родители', 'Одноклассники', 'Лида и Наташа']
Но не забываем, нужно еще добавить в список двух гостей. Добавление новых элементов в конец списка происходит при помощи метода append .
guests = ['Родители', 'Одноклассники', 'Лида и Наташа']print(guests) # ['Родители', 'Одноклассники', 'Лида и Наташа']guests.remove("Лида и Наташа")print(guests) # ['Родители', 'Одноклассники']guests.append('Дима')guests.append('Света')print(guests) # ['Родители', 'Одноклассники', 'Дима', 'Света']
В список можно не только добавить элемент, но и изменить одно из его значений на другое, согласно индексу элемента.
guests = ['Родители', 'Одноклассники', 'Дима', 'Света']print(guests) # ['Родители', 'Одноклассники', 'Лида и Наташа']guests[2] = 'Коллеги'print(guests) # ['Родители', 'Одноклассники', 'Коллеги', 'Света']
И так, список — это контейнер, хранящий объекты в определенном порядке. Обратите внимание, что в отличие от строк, методы списка меняют исходный список. Есть однако у списков кое‑что общее со строками. Это доступ к элементу по индексу и срезы. Все это работает в списках точно так же, как и в строках.
guests = ['Родители', 'Одноклассники', 'Дима', 'Света']print(guests[0]) # Родителиprint(guests[-1]) # Светаprint(guests[:2]) # ['Родители', 'Одноклассники']
Кортежи ¶
Кортежи — это контейнеры, хранящие объекты в определенном порядке. В отличие от списков, кортежи неизменяемы.
Как только вы создали кортеж, значение какого-либо его элемента уже нельзя изменить, как нельзя добавлять и удалять элементы. Кортежи объявляются с помощью круглых скобок. Элементы в кортеже должны быть разделены запятыми.
Для создания кортежей также используют один из двух вариантов синтаксиса. Первый:
my_tuple = tuple()
my_tuple = ()
Чтобы добавить в кортеж новые объекты, создайте его вторым способом, указав через запятую каждый желаемый элемент.
data = ('И. Иванов', 1958, True)print(data) # ('И. Иванов', 1958, True)
Даже если кортеж содержит только один элемент, после этого элемента все равно нужно поставить запятую. Таким образом Python отличает кортеж от числа в скобках, определяющих порядок выполнения операций.
Получить элементы кортежа можно так же, как и элементы списка, указывая индекс элемента.
books = ("1984", "О дивный новый мир", "451 градус по Фаренгейту")print(books[2]) # 451 градус по Фаренгейту
Ключевое слово in / not in ¶
Проверить, содержится ли элемент в кортеже, можно с помощью ключевого слова in .
books = ("1984", "О дивный новый мир", "451 градус по Фаренгейту")print("1984" in books) # Trueprint("Незнайка на луне" in books) # False
Поместите перед in ключевое слово not для проверки отсутствия элемента в кортеже.
books = ("1984", "О дивный новый мир", "451 градус по Фаренгейту")print("Незнайка на луне" not in books) # True
Те же операции с ключевыми словами in и not in сработают и со списками.
Сложение кортежей и списков ¶
При помощи оператора сложения можно соединять друг с другом две одинаковые структуры данных. Пример ниже со списками также будет работать и с кортежами:
colors1 = ["синий", "зеленый", "желтый"]colors2 = ["оранжевый", "розовый", "черный"]print(colors1 + colors2) # ['синий', 'зеленый', 'желтый', 'оранжевый', 'розовый', 'черный']
На данном этапе вам может стать интересно, зачем использовать структуры данных, которые кажутся менее гибкими, чем списки? На самом же деле, кортежи удобны, когда вы имеете дело со значениями, которые никогда не изменятся. Примером таких данных для кортежа могут быть географические координаты. Долготу и широту города следует сохранить в кортеже, поскольку эти значения никогда не изменятся, а сохранение в кортеже будет гарантировать, что другие части программы случайно их не изменят.
Итерирование ¶
Строки, списки и кортежи поддерживают итерирование (программа может их перебирать, значение за значением), то есть к каждому их элементу можно получить доступ через цикл — такие объекты называются итерируемыми. Каждый элемент в итерируемом объекте, как мы уже знаем, имеет свой порядковый индекс.
В следующем примере элемент Москва записан в списке с индексом 0, Хельсинки с индексом 1, а ‘Анкара’ с индексом 2.
cities = ['Москва', 'Хельсинки' ,'Анкара']for city in cities: print(city) # Москва# Хельсинки# Анкара
Вот мы и познакомились с оператором for — циклом, перебирающим итерируемый объект. Цикл for можно использовать, чтобы определять инструкции, которые будут выполняться один раз для каждого элемента в итерируемом объекте, и с помощью таких инструкций вы можете получать доступ ко всем этим элементам и осуществлять операции с ними.
Например, с помощью цикла for , выполняющего перебор списка строк, и метода upper можно сделать символы каждой строки прописными:
cities = ['Москва', 'Хельсинки' ,'Анкара']for city in cities: print(city.upper()) # МОСКВА# ХЕЛЬСИНКИ# АНКАРА
Как показано в примерах выше, цикл for определяется синтаксисом: for имя_переменной in имя_итерируемого_объекта: где имя_переменной — выбранное вами имя переменной, в которую каждую итерацию цикла будет записываться очередное значение из итерируемого объекта.
Python с нуля. Освойте с Виртуальным ИИ-помощником!
Как обратиться к элементу кортежа, который является значением словаря Python?
Есть словарь видов тренировки, его ключами являются коды видов тренировок, его значениями — кортеж из класса тренировки и числа полей (для каждого класса оно своё). Задача: при несоответствии числа полей «на входе» заданному в классе выдавать предупреждение. Для этого необходимо сравнить число полей «на входе» с числом полей, заданным в каждом классе, то есть, получается, что нужно обратиться ко второму элементу кортежа, который является значением словаря.
WORKOUT_TYPES = def read_package(workout_type: str, data: dict) -> Training: if workout_type not in WORKOUT_TYPES: raise ValueError(REPORT_TRAINING_ERROR.format(workout_type)) if len(data) != WORKOUT_TYPES[workout_type]: raise ValueError(REPORT_DATA_ERROR.format(workout_type, len(data), WORKOUT_TYPES[workout_type])) return WORKOUT_TYPES[workout_type](*data)
Заранее всех благодарю!
Отслеживать
задан 10 фев 2022 в 14:21
3 3 3 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Чтобы обратится к элементу кортежа, нужно указать в квадратных скобках его индекс.
То есть если у вас сам кортеж WORKOUT_TYPES[workout_type] , то к его второму элементу можно обратится так: WORKOUT_TYPES[workout_type][1]
Впрочем, когда в коде идёт такое обращение по чиселкам, то становится сложно читать и понимать этот код. Можно заменить простой кортеж на именованный и тогда к его полям можно будет обращаться по понятным именам. Например так:
from collections import namedtuple WtMeta = namedtuple('WtMeta', 'cls, fields_num') WORKOUT_TYPES = < 'SWM': WtMeta( Swimming, len(dataclasses.fields(Swimming)) ), 'RUN': WtMeta( Running, len(dataclasses.fields(Running)) ), 'WLK': WtMeta( SportsWalking, len(dataclasses.fields(SportsWalking)) ), >print( WORKOUT_TYPES['RUN'].fields_num ) # Вот так вот
Впрочем, в данном случае вообще не понятно, зачем вам отдельно хранить количество полей рядом с классом, если вы просто в любом месте можете взять класс и дёрнуть для него len(dataclasses.fields(. )) . Так вам не нужно будет хранить кортеж, достаточно будет только хранить один класс, и код станет проще.
Артём Санников
Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Главная › Языки программирования › Python › Кортежи › Обращение к элементам кортежа Python
Обращение к элементам кортежа Python
Чтобы обратиться к элементам кортежа необходимо написать имя кортежа, а затем в квадратных скобках указать индекс нужного (позицию) элемента.
Важный момент: списки начинаются с 0, то есть первый элемент списка имеет индекс [0].
Важный момент 2: чтобы вывести самый последний элемент в списке обратитесь по индексу [-1].
# Создаём кортеж numbers = (50, 100, 150, 200) # Выводим первый элемент print(numbers[0]) # Выводим последний элемент print(numbers[-1]) # Финальный результат в консоли 50 - Первый элемент кортежа 200 - Последний элемент кортежа
Записи по теме
- Копирование кортежа в Python
- Замена кортежа в Python
- Перебор всех значений в кортеже Python
- Что такое кортеж в Python?
Python. Урок 8. Кортежи (tuple)
![]()
Данный урок посвящен кортежам (tuple) в Python. Основное внимание уделено вопросу использования кортежей, почему иногда лучше применять их, а не списки, рассмотрены способы создания и основные приемы работы с кортежами. Также затронем тему преобразования кортежа в список и обратно.
Что такое кортеж (tuple) в Python?
Кортеж (tuple) – это неизменяемая структура данных, которая по своему подобию очень похожа на список. Как вы наверное знаете, а если нет, то, пожалуйста, ознакомьтесь с седьмым уроком, список – это изменяемый тип данных. Т.е. если у нас есть список a = [1, 2, 3] и мы хотим заменить второй элемент с 2 на 15, то мы может это сделать, напрямую обратившись к элементу списка.
>>> a = [1, 2, 3] >>> print(a) [1, 2, 3] >>> a[1] = 15 >>> print(a) [1, 15, 3]
С кортежем мы не можем производить такие операции, т.к. элементы его изменять нельзя.
>>> b = (1, 2, 3) >>> print(b) (1, 2, 3) >>> b[1] = 15 Traceback (most recent call last): File "", line 1, in module> b[1] = 15 TypeError: 'tuple' object does not support item assignment
Зачем нужны кортежи в Python?
Существует несколько причин, по которым стоит использовать кортежи вместо списков. Одна из них – это обезопасить данные от случайного изменения. Если мы получили откуда-то массив данных, и у нас есть желание поработать с ним, но при этом непосредственно менять данные мы не собираемся, тогда, это как раз тот случай, когда кортежи придутся как нельзя кстати. Используя их в данной задаче, мы дополнительно получаем сразу несколько бонусов – во-первых, это экономия места. Дело в том, что кортежи в памяти занимают меньший объем по сравнению со списками.
>>> lst = [10, 20, 30] >>> tpl = (10, 20, 30) >>> print(lst.__sizeof__()) 32 >>> print(tpl.__sizeof__()) 24
Во-вторых – прирост производительности, который связан с тем, что кортежи работают быстрее, чем списки (т.е. на операции перебора элементов и т.п. будет тратиться меньше времени). Важно также отметить, что кортежи можно использовать в качестве ключа у словаря.
Создание, удаление кортежей и работа с его элементами
Создание кортежей
Для создания пустого кортежа можно воспользоваться одной из следующих команд.
>>> a = () >>> print(type(a)) 'tuple'> >>> b = tuple() >>> print(type(b)) 'tuple'>
Кортеж с заданным содержанием создается также как список, только вместо квадратных скобок используются круглые.
>>> a = (1, 2, 3, 4, 5) >>> print(type(a)) class 'tuple'> >>> print(a) (1, 2, 3, 4, 5)
При желании можно воспользоваться функцией tuple().
>>> a = tuple((1, 2, 3, 4)) >>> print(a) (1, 2, 3, 4)
Доступ к элементам кортежа
Доступ к элементам кортежа осуществляется также как к элементам списка – через указание индекса. Но, как уже было сказано – изменять элементы кортежа нельзя!
>>> a = (1, 2, 3, 4, 5) >>> print(a[0]) 1 >>> print(a[1:3]) (2, 3) >>> a[1] = 3 Traceback (most recent call last): File "", line 1, in module> a[1] = 3 TypeError: 'tuple' object does not support item assignment
Удаление кортежей
Удалить отдельные элементы из кортежа невозможно.
>>> a = (1, 2, 3, 4, 5) >>> del a[0] Traceback (most recent call last): File "", line 1, in module> del a[0] TypeError: 'tuple' object doesn't support item deletion
Но можно удалить кортеж целиком.
>>> del a >>> print(a) Traceback (most recent call last): File "", line 1, in module> print(a) NameError: name 'a' is not defined
Преобразование кортежа в список и обратно
На базе кортежа можно создать список, верно и обратное утверждение. Для превращения списка в кортеж достаточно передать его в качестве аргумента функции tuple().
>>> lst = [1, 2, 3, 4, 5] >>> print(type(lst)) 'list'> >>> print(lst) [1, 2, 3, 4, 5] >>> tpl = tuple(lst) >>> print(type(tpl)) 'tuple'> >>> print(tpl) (1, 2, 3, 4, 5)
Обратная операция также является корректной.
>>> tpl = (2, 4, 6, 8, 10) >>> print(type(tpl)) 'tuple'> >>> print(tpl) (2, 4, 6, 8, 10) >>> lst = list(tpl) >>> print(type(lst)) 'list'> >>> print(lst) [2, 4, 6, 8, 10]
P.S.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Раздел: Python Уроки по Python Метки: Python, Уроки Python
Python. Урок 8. Кортежи (tuple) : 5 комментариев
- Владимир 15.01.2019 Сорян за глупый вопрос, но я только начинаю изучать Python.
И так, есть два или более кортежей и нужно найти элементы, общие для этих кортежей, т е. взять пересечение множеств. Существует ли в питоне для этого оператор (функция, метод, …) или нужно самому “городить” такую функцию? Или может есть какая-нибудь подключаемая библиотека с такой функцией?
- writer 09.02.2019 Добрый день!
Если вы хотите выполнять операции пересечения и т.п. лучше для этих целей использовать тип данных не кортеж (tuple), а множество (set)
- Андрей 24.10.2020 f(*opt)