Как обратиться к элементу кортежа python
Перейти к содержимому

Как обратиться к элементу кортежа python

  • автор:

Как обратиться к элементу кортежа python

Кортеж (tuple) представляет последовательность элементов, которая во многом похожа на список за тем исключением, что кортеж является неизменяемым (immutable) типом. Поэтому мы не можем добавлять или удалять элементы в кортеже, изменять его.

Для создания кортежа используются круглые скобки, в которые помещаются его значения, разделенные запятыми:

tom = ("Tom", 23) print(tom) # ("Tom", 23)

Также для определения кортежа мы можем просто перечислить значения через запятую без применения скобок:

tom = "Tom", 23 print(tom) # ("Tom", 23)

Если вдруг кортеж состоит из одного элемента, то после единственного элемента кортежа необходимо поставить запятую:

tom = ("Tom",)

Для создания кортежа из другого набора элементов, например, из списка, можно передать список в функцию tuple() , которая возвратит кортеж:

data = ["Tom", 37, "Google"] tom = tuple(data) print(tom) # ("Tom", 37, "Google")

С помощью встроенной функции len() можно получить длину кортежа:

tom = ("Tom", 37, "Google") print(len(tom)) # 3

Обращение к элементам кортежа

Обращение к элементам в кортеже происходит также, как и в списке, по индексу. Индексация начинается также с нуля при получении элементов с начала списка и с -1 при получении элементов с конца списка:

tom = ("Tom", 37, "Google", "software developer") print(tom[0]) # Tom print(tom[1]) # 37 print(tom[-1]) # software developer

Но так как кортеж — неизменяемый тип (immutable), то мы не сможем изменить его элементы. То есть следующая запись работать не будет:

tom[1] = "Tim"

При необходимости мы можем разложить кортеж на отдельные переменные:

name, age, company, position = ("Tom", 37, "Google", "software developer") print(name) # Tom print(age) # 37 print(position) # software developer print(company) # Google

Получение подкортежей

Как и в списках, можно получить часть кортежа в виде другого кортежа

tom = ("Tom", 37, "Google", "software developer") # получем подкортеж с 1 по 3 элемента (не включая) print(tom[1:3]) # (37, "Google") # получем подкортеж с 0 по 3 элемента (не включая) print(tom[:3]) # ("Tom", 37, "Google") # получем подкортеж с 1 по послдений элемент print(tom[1:]) # (37, "Google", "software developer")

Кортеж как параметр и результат функций

Особенно удобно использовать кортежи, когда необходимо возвратить из функции сразу несколько значений. Когда функция возвращает несколько значений, фактически она возвращает в кортеж:

def get_user(): name = "Tom" age = 22 company = "Google" return name, age, company user = get_user() print(user) # ("Tom", 37, "Google")

При передаче кортежа в функцию с помощью оператора * его можно разложить на отдельные значения, которые передаются параметрам функции:

def print_person(name, age, company): print(f"Name: Age: Company: ") tom = ("Tom", 22) print_person(*tom, "Microsoft") # Name: Tom Age: 22 Company: Microsoft bob = ("Bob", 41, "Apple") print_person(*bob) # Name: Bob Age: 41 Company: Apple

Перебор кортежей

Для перебора кортежа можно использовать стандартные циклы for и while . С помощью цикла for:

tom = ("Tom", 22, "Google") for item in tom: print(item)

С помощью цикла while:

tom = ("Tom", 22, "Google") i = 0 while i < len(tom): print(tom[i]) i += 1

Проверка наличия значения

Как для списка с помощью выражения элемент in кортеж можно проверить наличие элемента в кортеже:

user = ("Tom", 22, "Google") name = "Tom" if name in user: print("Пользователя зовут Tom") else: print("Пользователь имеет другое имя")

Как обратиться к элементу кортежа, который является значением словаря 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(. )) . Так вам не нужно будет хранить кортеж, достаточно будет только хранить один класс, и код станет проще.

Списки и кортежи в Python

Список в Python - это набор элементов, следующих в определенном порядке. Списки позволяют хранить в одном месте данные, сколько бы их не было, один элемент или тысяча элементов. В список можно поместить любую информацию, даже не связанную между собой. Так как список обычно содержит более одного элемента, рекомендуется называть их именем во множественном лице. Списки могут динамически изменять свои размеры, увеличиваясь и изменяясь во время выполнения программы. Кортежи в отличие от списков изменяться не могут. Длина кортежа определяется количеством элементов в нем, и в процессе выполнения программы изменяться не может. Списки и кортежи обладают многими общими возможностями.

Содержание страницы
1. Создание списка в Python
2.1. Обращение к элементам списка
2.2. Индексы начинаются с 0, а не с 1
3.1. Использование элементов списка в строках
3.2. Использование элементов списка в выражениях
4.1. Изменение элементов в списке
4.2. Добавление элементов в конец списка. Метод append()
4.3. Вставка элемента в список. Метод insert()
4.4. Удаление элемента в списке командой del()
4.5. Удаление элемента в списке с использованием метода pop()
4.6. Удаление элементов в списке по значению. Метод remove()
4.7. Очистка списка. Метод clear()
5.1. Постоянная сортировка списка методом sort()
5.2. Временная сортировка списка функцией sorted()
6. Определение длины списка. Функция len()
7. Ошибки при работе со списками
8. Кортежи

1. Создание списка в Python.

В языке Python список обозначается квадратными скобками [ ]. В списках обычно хранятся однородные данные, то есть значения одного типа. Пример списка из пяти элементов.

cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]

Так же в списках можно хранить разнородные данные, то есть разных типов. Например, в следующем списке хранится имя студента(строка), фамилия(строка), его средняя оценка(float), год окончания заведения(int)

id = [ 'Jon', 'Bond', 3.54, 2020 ]

2.1. Обращение к элементам списка Python.

Списки представляют собой упорядоченные наборы данных, поэтому для обращения к элементу списка, нужно сообщить Python позицию(индекс) элемента. Для этого в начале укажите имя списка, а затем индекс элемента в квадратных скобках [ ] .

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars
['audi', 'bmw', 'ford', 'kia', 'land rover']
>>> cars [1]
'bmw'
>>> cars [1] .title()
'Bmw'

В первом случае выводится элемент с индексом 1. Во втором случае выводится этот же элемент с заглавной буквы, с помощью метода title() .

2.2. Индексы начинаются с 0, а не с 1.

В Python, как и во многих других языках, первый элемент имеет индекс 0, а не 1. Если при выполнении программы, вы получили неожиданный результат, то проверьте не допустили ли вы ошибку по смещению на 1. Второй элемент списка идет под индексом 1. Например, чтобы обратиться к третьему элементу списка, следует запросить элемент с номером 2. В следующем примеры выводятся элементы с индексом 1 и 3.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars[ 1 ]
'bmw'
>>> cars[ 3 ]
'kia'

>>> cars[ -1 ]
'land rover'
>>> cars[ -3 ]
'ford'

В Python есть возможность для обращения сразу к последнему элементу списка. Для этого нужно запросить элемент с индексом [-1] . Этот синтаксис так же распространяется и на другие отрицательные значения индексов. Индекс [-3] возвращает третий элемент с конца, и т.д.

3.1. Использование элементов списка в строках.

Отдельные элементы списков могут использоваться для построения сообщений. Для этого можно воспользоваться f-строками. Возьмем предыдущий список автомобилей и извлечем из него один элемент.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> message = f" Мой первый автомобиль . "
>>> print(message)
Мой первый автомобиль Ford.

В результате строится сообщение, в котором используется элемент с индексом 2 и сохраняется в переменной.

3.2. Использование элементов списка в выражениях.

Элементы списка могут так же использоваться как переменные в выражениях. Предположим, есть список каких-то чисел и вам нужно проделать с ними арифметические операции.

>>> a = [1, 5, 70, 4, 28]
>>> a[ 0 ] + a[ 2 ]
71
>>> a[ 2 ] / a[ 1 ]
14.0

4.1. Изменение элементов в списке Python.

Как правило вы будете создавать динамические списки. Это означает, что во время выполнения программы элементы будут добавляться и удалятся. Изменение элементов в списке Python напоминает синтаксис обращения к элементу списка. Для того чтобы изменить элемент, укажите имя списка и индекс изменяемого элемента в квадратных скобках [ ] , затем задайте новое значение, которое присвоится этому элементу. Например, в нашем списке машин мы хотим поменять бренд 'ford' на 'opel'.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars [ 2 ] = 'opel'
>>> cars
['audi', 'bmw', 'opel', 'kia', 'land rover']

4.2. Добавление элементов в конец списка Python. Метод append() .

Самый простой способ добавление элемента в список - это присоединение его в конец списка. Для этого используется метод append() . Метод append() присоединяет элемент в конец списка, при этом остальные элементы списка не изменяются и не сдвигаются.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars. append ('opel')
>>> print(cars)
['audi', 'bmw', 'ford', 'kia', 'land rover', 'opel']

Если вы хотите начать с пустого списка и добавлять в него элементы, то так же рекомендуется использовать метод append() . Данные, которые захочет сохранить пользователь часто не известны после запуска программы. Создайте для него пустой список, а затем присоединяйте новые данные.

>>> cars = [ ]
>>> cars. append ('audi')
>>> cars. append ('bmw')
>>> cars. append ('kia')
>>> cars. append ('land rover')
>>> print(cars)
['audi', 'bmw', 'kia', 'land rover']

4.3. Вставка элемента в список Python. Метод insert() .

Для вставки элемента в определенную позицию списка существует метод insert( ). Для этого следует указать индекс и значение нового элемента.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars. insert (0, 'opel')
>>> print(cars)
['opel', 'audi', 'bmw', 'ford', 'kia', 'land rover']

В этом примере значение 'opel' вставляется в начало списка, а все остальные значения при этом сдвигаются на одну позицию индекса.

4.4. Удаление элемента в списке командой del() .

Если вы знаете индекс элемента, который нужно удалить, то легко можно воспользоваться командой del() . Команда del() позволяет удалить любой элемент из любой позиции списка.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> del cars[2]
>>> print(cars)
['audi', 'bmw', 'kia', 'land rover']
>>> del cars[0]
>>> print(cars)
['bmw', 'kia', 'land rover']

При выполнении команды del() элемент удаляется навсегда.

4.5. Удаление элемента списка с использованием метода pop() .

Не всегда требуется удаление элемента из списка навсегда. Например, в веб-приложение пользователь из списка активных участников, переходит в список не активных. Метод pop() удаляет элемент из списка, но позволяет с ним еще работать после удаления.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> sale = cars. pop (3)
>>> print(f"Автомобиль марки сегодня был продан.")
Автомобиль марки Kia сегодня был продан.
>>> cars
['audi', 'bmw', 'ford', 'land rover']

Сначала элемент извлекается из списка методом pop() и сохраняется в переменной sale. Затем эта переменная уже используется для вывода сообщения с помощью f-строки.

После каждого использования метода pop() элемент удаляется из списка.

4.6. Удаление элементов списка по значению. Метод remove()

Когда индекс удаляемого элемента не известен, но вы знаете значение этого элементы, можно воспользоваться методом remove() . Предположим, нам нужно удалить из списка автомобиль ford. Ниже в примере значение ford удаляется из списка.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars. remove ('ford')
>>> cars
['audi', 'bmw', 'kia', 'land rover']

Важно: Метод remove() удаляет только первое вхождение заданного значение в списке. Если в списке значения могут повторяться, то нужно воспользоваться циклом для перебора.

4.7. Очистка списка. Метод clear() .

Чтобы удалить все элементы списка используйте метод clear() .

>>> cars = [ 'ford', 'opel', 'audi', 'land rover', 'bmw' ]
>>> cars. clear ()
>>> print(cars)
[]

5.1. Постоянная сортировка списка методом sort() .

Списки в Python легко отсортировать. Для этого есть метод sort() . Данный метод сортирует элементы по алфавиту. Если список состоит из чисел, то отсортирует их по возрастанию.

>>> cars = [ 'ford', 'opel', 'audi', 'land rover', 'bmw' ]
>>> cars. sort ()
>>> print(cars)
['audi', 'bmw', 'ford', 'land rover', 'opel']
>>> a = [ 560, 25, 452, 14, 945, 643, 1, -42, -5 ]
>>> a. sort ()
>>> print(a)
[-42, -5, 1, 14, 25, 452, 560, 643, 945]

Чтобы отсортировать список по убыванию, в методе sort() используйте не обязательный аргумент reverse.( reverse=True )

>>> cars.sort( reverse=True )
>>> print(cars)
['opel', 'land rover', 'ford', 'bmw', 'audi']

Метод sort() изменяет список и вернутся к исходному порядку не получится.

5.2. Временная сортировка списка функцией sorted() .

Для того чтобы исходный список не менялся, но для удобства работы вы могли получить отсортированный список, существует функция sorted() . Функция sorted() возвращает список в отсортированном порядке.

>>> cars = [ 'ford', 'opel', 'audi', 'land rover', 'bmw' ]
>>> print( sorted (cars))
['audi', 'bmw', 'ford', 'land rover', 'opel']
>>> print(cars)
['ford', 'opel', 'audi', 'land rover', 'bmw']

На примере видно, что исходный список cars остался прежним и не изменился.

6. Определение длины списка. Функция len() .

Для того чтобы быстро определить длину списка используйте функцию len() .

>>> cars = [ 'ford', 'opel', 'audi', 'land rover', 'bmw' ]
>>> print( len (cars))
5

7. Ошибки при работе со списками Python

Одна из основных ошибок при работе со списками, это ошибка индексирования. Например, вы пытаетесь вернуть элемент с индексом 5. В результате Python при работе со списком не находит элемент с этим индексом, происходит ошибка индексирования.

>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars [5]
Traceback (most recent call last):
File "", line 1, in
IndexError: list index out of range

Индекс должен быть целым числом или выражением, дающим целочисленный результат. При попытке использования нецелочисленного индекса происходит ошибка TypeError. Так же ошибка индексирования образуется при попытке обратиться к элементу пустого списка.

8. Кортежи в Python.

Когда требуется создать не изменяемый список, на помощь приходят кортежи. В кортежах часто хранятся разнородные данные, но данные также могут быть однородными. Длина кортежа определяется количеством элементов в кортеже и не может меняться во время выполнения программы. Кортеж выглядит как список, но вместо квадратных скобок используются круглые ( ) . При выводе кортежа Python отображает его содержимое в круглых скобках. Для упаковки элементов в кортеж можно перечислить их через запятую.

>>> student = ()
>>> len(student)
0
>>> student = 'Ivan', 'Ivanov', 3.5
>>> print(student)
('Ivan', 'Ivanov', 3.5)
>>> print(student[1])
Ivanov

Обращаться к отдельным элементам можно по индексам также как и в списках. Попробуем изменить один элемент кортежа и посмотрим, что произойдет.

>>> student[1] = 'Petrov'
Traceback (most recent call last):
File "", line 1, in
TypeError: 'tuple' object does not support item assignment

Когда вы захотите изменить элемент в кортеже, Python выдаст ошибку о невозможности изменения элементов. TypeError: 'tuple' object does not support item assignment.

7. Кортежи

Кортежи очень похожи на списки, но имеют одно важное отличие — они неизменяемые. В остальном, они также могут состоять из данных разных типов и использовать индексы, которые определяют конкретный порядок элементов.

Индекс начинается с нуля, как и в случае списков, а отрицательный индекс — с -1. Этот индекс указывает на последний элемент кортежа.

Где используется?

Кортежи — распространенная структура данных для хранения последовательностей в Python.

  • .index() — используется для вывода индекса элемента.
  • .count() — используется для подсчета количества элементов в кортеже.
  • sum() — складывает все элементы кортежа.
  • min() — показывает элемент кортежа с наименьшим значением.
  • max() — показывает элемент кортежа с максимальным значением.
  • len() — показывает количество элементов кортежа.

Рекомендации по работе с кортежами

  1. Кортежи создаются с помощью круглых скобок: () ;
  2. Элементы внутри кортежей разделяются запятыми;
  3. Важно соблюдать особенности синтаксиса, характерные для каждого отдельного типа данных в кортеже — кавычки для строк, числа и булевые значения без кавычек и так далее.

Дальше — кортеж, включающий элементы разных типов:

 
>>> p_tup = ("Лондон", "Пекин", 44, True)
>>> print(p_tup)
('Лондон', 'Пекин', 44, True)

Доступ к элементам: получить элементы кортежа можно с помощью соответствующего индекса в квадратных скобках.

Например, для получения элемента «Лондон» нужно использовать следующий индекс: p_tup[0]

А для 44: p_tup[2]

Последний элемент следующего кортежа — булево True . Доступ к нему мы получаем с помощью функции print .

 
>>> p_tup = ("Лондон", "Пекин", 44, True)
>>> print(p_tup[3])
True

Пример получения первого элемента кортежа.

 
>>> p_tup = ("Лондон", "Пекин", 44, True)
>>> print(p_tup[0])
'Лондон'
  1. Обратное индексирование: по аналогии с элементами списка элементы кортежа также можно получить с помощью обратного индексирования. Оно начинается с -1. Это значение указывает на последний элемент.
    Так, для получения последнего элемент p_tup нужно писать p_tup[-1] . p_tup[-2] вернет второй элемент с конца и так далее.
  2. Главное отличие кортежей от списков — они неизменяемые. Кортежам нельзя добавлять или удалять элементы.
    Поэтому эта структура используется, когда известно, что элементы не будут меняться в процессе работы программы.
 
>>> p_tup = ("Лондон", "Пекин", 44, True)
>>> print(p_tup[-1])
True

Функция .index()

.index() — полезный метод, используемый для получения индекса конкретного элемента в кортеже.

Посмотрим на примере.

 
>>> p_tup = ("Лондон", "Пекин", 44, True)
>>> print(p_tup.index("Лондон"))
0

Функция .count()

Метод .count() подходит для определения количества вхождений определенного элемента в кортеже.

В примере ниже можно увидеть, что считается количество вхождений числа 101 в списке p_cup . Результат — 2.

 
>>> p_tup = (5, 101, 42, 3, 101)
>>> print(p_tup.count(101))
2

Функция sum()

Функция sum() возвращает общую сумму чисел внутри кортежа.

 
>>> lucky_numbers = (5, 55, 4, 3, 101, 42)
>>> print(sum(lucky_numbers))
210

Функция min()

Функция min() вернет элемент с самым маленьким значением в кортеже.

 
>>> lucky_numbers = (5, 55, 4, 3, 101, 42)
>>> print(min(lucky_numbers))
5

Функция max()

Функция max() вернет элемент с максимальным значением в кортеже.

 
>>> lucky_numbers = (5, 55, 4, 3, 101, 42)
>>> print(max(lucky_numbers))
101

Задачи к уроку

Попробуйте решить задачи к этому уроку для закрепления знаний.

1. Создайте кортеж с цифрами от 0 до 9 и посчитайте сумму.

# данный код numbers = print(sum(numbers)) # требуемый вывод: # 45

2. Введите статистику частотности букв в кортеже.

# данный код long_word = ( 'т', 'т', 'а', 'и', 'и', 'а', 'и', 'и', 'и', 'т', 'т', 'а', 'и', 'и', 'и', 'и', 'и', 'т', 'и' ) print("Количество 'т':", ) print("Количество 'a':", ) print("Количество 'и':", ) # требуемый вывод: # Колличество 'т': 5 # Колличество 'а': 3 # Колличество 'и': 11
  1. Допишите скрипт для расчета средней температуры.
    Постарайтесь посчитать количество дней на основе week_temp . Так наш скрипт сможет работать с данными за любой период.
# данный код week_temp = (26, 29, 34, 32, 28, 26, 23) sum_temp = days = mean_temp = sum_temp / days print(int(mean_temp)) # требуемый вывод: # 28

Тест по кортежам

Пройдите тест к этому уроку для проверки знаний. В тесте 5 вопросов, количество попыток неограниченно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *