Питон кортежи: Кортежи (tuple) | Python 3 для начинающих и чайников

Содержание

Кортежи (tuple) | Python 3 для начинающих и чайников

Сегодня я расскажу о таком типе данных, как кортежи (tuple) и о том, где они применяются.

Кортеж, по сути — неизменяемый список.

Зачем нужны кортежи, если есть списки?

  • Защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо).
  • Меньший размер. Дабы не быть голословным:
>>> a = (1, 2, 3, 4, 5, 6)
>>> b = [1, 2, 3, 4, 5, 6]
>>> a.__sizeof__()
36
>>> b.__sizeof__()
44
  • Возможность использовать кортежи в качестве ключей словаря:
>>> d = {(1, 1, 1) : 1}
>>> d
{(1, 1, 1): 1}
>>> d = {[1, 1, 1] : 1}
Traceback (most recent call last):
  File "", line 1, in
    d = {[1, 1, 1] : 1}
TypeError: unhashable type: 'list'

Как работать с кортежами?

С преимуществами кортежей разобрались, теперь встает вопрос — а как с ними работать. Примерно так же, как и со списками.

Создаем пустой кортеж:

>>> a = tuple() # С помощью встроенной функции tuple()
>>> a
()
>>> a = () # С помощью литерала кортежа
>>> a
()
>>>

Создаем кортеж из одного элемента:

>>> a = ('s')
>>> a
's'

Стоп. Получилась строка. Но как же так? Мы же кортеж хотели! Как же нам кортеж получить?

>>> a = ('s', )
>>> a
('s',)

Ура! Заработало! Все дело — в запятой. Сами по себе скобки ничего не значат, точнее, значат то, что внутри них находится одна инструкция, которая может быть отделена пробелами, переносом строк и прочим мусором. Кстати, кортеж можно создать и так:

>>> a = 's',
>>> a
('s',)

Но все же не увлекайтесь, и ставьте скобки, тем более, что бывают случаи, когда скобки необходимы.

Ну и создать кортеж из итерируемого объекта можно с помощью все той же пресловутой функции tuple()

>>> a = tuple('hello, world!')
>>> a
('h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!')

Операции с кортежами

Все операции над списками, не изменяющие список (сложение, умножение на число, методы index() и count() и некоторые другие операции). Можно также по-разному менять элементы местами и так далее.

Например, гордость программистов на python — поменять местами значения двух переменных:

a, b = b, a

Кортежи. Курс «Python. Введение в программирование»

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

>>> a = (10, 2.13, "square", 89, 'C')
>>> a
(10, 2.13, 'square', 89, 'C')

Из кортежа можно извлекать элементы и брать срезы:

>>> a[3]
89
>>> a[1:3]
(2.13, 'square')

Однако изменять его элементы нельзя:

>>> a[0] = 11
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not 
support item assignment

Также у типа tuple нет методов для добавления и удаления элементов.

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

list() и tuple():

>>> a = (10, 2.13, "square", 89, 'C')
>>> b = [1, 2, 3]
>>> c = list(a)
>>> d = tuple(b)
>>> c
[10, 2.13, 'square', 89, 'C']
>>> d
(1, 2, 3)

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

def addNum(seq, num):
    for i in range(len(seq)):
        seq[i] += num
    return seq
 
origin = [3, 6, 2, 6]
changed = addNum(origin, 3)
 
print(origin)
print(changed)

Данная программа неправильная. Хотя никаких выбросов исключений не произойдет, она содержит логическую ошибку. На выводе получаем:

[6, 9, 5, 9]
[6, 9, 5, 9]

То есть исходный список был также изменен. Параметр seq содержал ссылку не на свой локальный список, а на список-оригинал. Таким образом, в операторе return здесь нет смыла. Если функция замысливалась как изменяющая глобальный список, то программа должна выглядеть так:

def addNum(seq, num):
    for i in range(len(seq)):
        seq[i] += num
 
origin = [3, 6, 2, 6]
addNum(origin, 3)
print(origin)

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

def addNum(seq, num):
    new_seq = []
    for i in seq:
        new_seq.append(i + num)
    return new_seq
 
origin = [3, 6, 2, 6]
changed = addNum(origin, 3)
 
print(origin)
print(changed)

Результат:

[3, 6, 2, 6]
[6, 9, 5, 9]

Исходный список в функции не меняется. Его элементы лишь перебираются.

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

Хотя преобразовывать к кортежу можно как при передаче в функцию, так и в самой функции, лучше сразу делать глобальный список кортежем. Поскольку неизменяемые объекты передаются по значению, а не по ссылке, то в функцию будет поступать копия структуры, а не оригинал. Даже если туда передается оригинал, изменить его невозможно. Можно лишь, как вариант, скопировать его и/или изменить тип, создав тем самым локальную структуру, и делать с ней все, что заблагорассудится.

def addNum(seq, num):
    seq = list(seq)
    for i in range(len(seq)):
        seq[i] += num
    return seq
 
origin = (3, 6, 2, 6)
changed = addNum(origin, 3)
 
print(origin)
print(changed)

Списки в кортежах

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

>>> nested = (1, "do", ["param", 10, 20])

Как вы думаете, можем ли мы изменить список ["param", 10, 20] вложенный в кортеж nested? Список изменяем, кортеж – нет. Если вам кажется, что нельзя, то вам кажется неправильно. На самом деле можно:

>>> nested[2][1] = 15
>>> nested
(1, 'do', ['param', 15, 20])

Примечание. Выражения типа nested[2][1] используются для обращения к вложенным объектам. Первый индекс указывает на позицию вложенного объекта, второй – индекс элемента внутри вложенного объекта. Так в данном случае сам список внутри кортежа имеет индекс 2, а элемент списка 10 – индекс 1 в списке.

Странная ситуация. Кортеж неизменяем, но мы все-таки можем изменить его. На самом деле кортеж остается неизменяемым. Просто в нем содержится не сам список, а ссылка на него. Ее изменить нельзя. Но менять сам список можно.

Чтобы было проще понять, перепишем кортеж так:

>>> l = ["param", 10, 20]
>>> t = (1, "do", l)
>>> t
(1, 'do', ['param', 10, 20])

Кортеж содержит переменную-ссылку. Поменять ее на другую ссылку нельзя. Но кортеж не содержит самого списка. Поэтому его можно менять как угодно:

>>> l.pop(0)
'param'
>>> t
(1, 'do', [10, 20])

Однако такой номер не проходит с неизменяемыми типами:

>>> a = "Kat"
>>> t = (a, l)
>>> t
('Kat', [10, 20])
>>> a = "Bat"
>>> t
('Kat', [10, 20])

Они передаются в кортеж как и в функцию – по значению. То есть их значение копируется в момент передачи.

Практическая работа

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

  2. Заполните один кортеж десятью случайными целыми числами от 0 до 5 включительно.

    Также заполните второй кортеж числами от -5 до 0. Для заполнения кортежей числами напишите одну функцию. Объедините два кортежа с помощью оператора +, создав тем самым третий кортеж. С помощью метода кортежа count() определите в нем количество нулей. Выведите на экран третий кортеж и количество нулей в нем.

Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса

Кортежи python для начинающих. Функции и основные операции с tuples

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

В этом руководстве вы познакомитесь с кортежами Python в подробностях:

  • Узнаете, как их создавать. Увидите, что значит неизменяемый тип на примерах
  • Разберетесь, чем кортежи в Python отличаются от списков
  • Познакомитесь с операциями: срезами, конкатенацией, умножением и так далее
  • Увидите встроенные функции
  • Научитесь присваивать сразу несколько значений кортежами

Кортеж Python

Эта структура данных используется для хранения последовательности упорядоченных и неизменяемых элементов.

Кортежи создают с помощью круглых скобок (). Для создания нужно написать следующее:

cake = ('c','a','k','e') 
print(type(cake))
<class 'tuple'>

Примечание: type() — это встроенная функция для проверки типа данных переданного параметра.

Кортежи могут включать однородные и разнородные значения. Но после объявления их уже нельзя будет поменять:

mixed_type = ('C',0,0,'K','I','E')

for i in mixed_type:
    print(i,":",type(i))
C : <class 'str'>
0 : <class 'int'>
0 : <class 'int'>
K : <class 'str'>
I : <class 'str'>
E : <class 'str'>

mixed_type[1] = "O"
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-16-dec28c299a95> in <module>()
----> 1 mixed_type[1] = 'O'  # Попробуйте изменить 0 на «O»


TypeError: 'tuple' object does not support item assignment

Последняя ошибка появилась из-за попытки поменять значения внутри кортежа.

Кортежи можно создавать и вот так:

numbers_tuple = 1,2,3,4,5
print(type(numbers_tuple))
<class 'tuple'>

Кортежи против списков

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

numbers_tuple = (1,2,3,4,5)
numbers_list = [1,2,3,4,5]


numbers_tuple.append(6)
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-26-e48876d745ce> in <module>()
      3 
      4 # Добавим число в кортеж
----> 5 numbers_tuple.append(6)


AttributeError: 'tuple' object has no attribute 'append'

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


numbers_list.append(6)
numbers_list.append(7)
numbers_list.append(8)


numbers_list.remove(7)
print(numbers_list)
[1, 2, 3, 4, 5, 6, 8]

Но зачем использовать этот тип данных, если он неизменяемый?

Кортежи не только предоставляют доступ только для чтения к элементам, но и работают быстрее списков. Рассмотрим в качестве примера следующий код:

>>> import timeit
>>> timeit.timeit('x=(1,2,3,4,5,6,7,8,9)', number=100000)
0.0018976779974764213
>>> timeit.timeit('x=[1,2,3,4,5,6,7,8,9]', number=100000)
0.019868606992531568

Какую роль играет неизменяемость в случае с кортежами?

Согласно официальной документации Python неизменяемый — это «объект с фиксированным значением», но в отношении кортежей «значение» — это чересчур размытый термин. Лучше использовать id. id определяет расположения объекта в памяти.

Рассмотрим подробнее:


n_tuple = (1, 1, [3,4])


id(n_tuple[0]) == id(n_tuple[1])
True

id(n_tuple[0]) == id(n_tuple[2])
False
print(id(n_tuple[0]), id(n_tuple[2]))
4297148528, 4359711048
n_tuple.append(5)
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-40-3cd388e024ff> in <module>()
----> 1 n_tuple.append(5)


AttributeError: 'tuple' object has no attribute 'append'

Добавить элемент в кортеж нельзя, поэтому появляется последняя ошибка AttributeError. Вот почему эта структура данных неизменна. Но всегда можно сделать вот так:

n_tuple[2].append(5)
n_tuple
(1, 1, [3, 4, 5])

Это позволяет изменять оригинальный кортеж? Куда в таком случае делась их неизменяемость?

Суть в том, что id списка в кортеже не меняется несмотря на добавленный в него элемент 5.

id(n_tuple[2])
4359711048

Теперь вы знаете следующее:

Некоторые кортежи (которые содержат только неизменяемые объекты: строки и так далее) — неизменяемые, а другие (содержащие изменяемые типы, например, списки) изменяемые. Но это очень обсуждаемая тема среди программистов на Python и необходимы кое-какие познания, чтобы полностью понять ее. В целом же кортежи неизменяемые.

  • Вы не можете добавлять в них новые элементы. У этого типа нет методов append() или extend()
  • Удалять элементы тоже нельзя, также из-за неизменяемости. Методов remove() и pop() здесь нет
  • Искать элементы в кортеже можно, потому что этот процесс его не меняет
  • Разрешено использовать оператор in для проверки наличия элемента в кортеже

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

Если вы хотите узнать больше о списках Python, обязательно ознакомьтесь с этим руководством!

Стандартные операции с кортежами

Python предоставляет несколько способов для управления кортежами. Рассмотрим их на примерах.

Срезы

Значение индекса первого элемента в кортеже — 0. По аналогии со списками эти значения можно использовать с квадратными скобками [] для получения доступа к кортежам:

numbers = (0,1,2,3,4,5)
numbers[0]
0

Можно использовать и отрицательные значения:

numbers[-1]
5

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

[Начальный индекст (включен):Конечный индекс (исключен):Частота]

Частота в данном случае является опциональным параметром, а его значение по умолчанию равно 1.

# Элемент с индексом 4 исключен
numbers[1:4]
(1, 2, 3)

numbers[:]
(0, 1, 2, 3, 4, 5)
# Частота = 2
numbers[::2]
(0, 2, 4)

Совет: значение частоты может быть и негативным, чтобы развернуть кортеж.

numbers[::-1]
(5, 4, 3, 2, 1, 0)

Объединение кортежей

Можно объединять кортежи для создания нового объекта. Операция объединения выполняет конкатенацию двух кортежей.

x = (1,2,3,4)
y = (5,6,7,8)


z = x + y 
print(z)
(1, 2, 3, 4, 5, 6, 7, 8)
y = [5,6,7,8]
z = x + y
print(z)
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-55-d442c6414a4c> in <module>()
      1 y = [5,6,7,8]
----> 2 z = x + y
      3 print(z)


TypeError: can only concatenate tuple (not "list") to tuple

Разрешается объединять только определенные типы данных. Так, попытка соединить кортеж и список закончится ошибкой.

Умножение кортежей

Операция умножения приводит к тому, что кортеж повторяется несколько раз.

x = (1,2,3,4)
z = x*2
print(z)
(1, 2, 3, 4, 1, 2, 3, 4)

Функции кортежей

В отличие от списков у кортежей нет методов, таких как append(), remove(), extend(), insert() или pop() опять-таки из-за их неизменяемости. Но есть другие:

count() и len()

count() возвращает количество повторений элемента в кортеже.

a = [1,2,3,4,5,5]
a.count(5)
2

len() — длину кортежа:

a = (1,2,3,4,5)
print(len(a))
5

any()

Функцию any() можно использовать, чтобы определить являются ли элементы кортежа итерируемыми. Если да, то она вернет True.

a = (1,)
print(any(a))
True

Обратите внимание на запятую (,) в объявлении кортежа a. Если ее не указать при создании объекта с одним элементом? Python предположит, что вы по ошибке добавили лишнюю пару скобок (это ни на что не влияет), но тип данных в таком случае — это не кортеж. Поэтому важно не забывать использовать запятую при объявлении кортежа с одним элементом.

И снова к функции any. В булевом контексте значение элемента не имеет значения. Пустой кортеж вернет False, а кортеж с хотя бы одним элементом — True.

b = ()
print(any(b))
False

Функция может быть полезной, если кортеж вызывается? и нужно удостовериться, что он не пустой.

tuple()

Функция tuple() используется для конвертации данных в кортеж. Например, так можно превратить список в кортеж.

a_list = [1,2,3,4,5]
b_tuple = tuple(a_list)
print(type(b_tuple))
<class 'tuple'>

min() и max()

Функция max()q возвращает самый большой элемент последовательности, а min() — самый маленький. Возьмем следующий пример:

print(max(a))
print(min(a))
5
A

Эти функции можно использовать и для кортежей со строками.


a = ('Apple') 
print(max(a))
p

sum()

С помощью этой функции можно вернуть сумму элементов в кортеже. Работает только с числовыми значениями.

sum(a)
28

sorted()

Чтобы получить кортеж с отсортированными элементами, используйте sorted() как в следующем примере:

a = (6,7,4,2,1,5,3)
sorted(a)
[1, 2, 3, 4, 5, 6, 7]

Но важно отметить, что возвращаемый тип — список, а не кортеж. При этом последовательность в оригинальном объекте неизменна, а сам он остается кортежем.

Присваивание несколько кортежей

Кортежи можно использовать для присваивания нескольких значений одновременно. Вот так:

a = (1,2,3)
(one,two,three) = a
print(one)
1

a — это кортеж из трех элементов и (one, two, three) — кортеж трех переменных. Присваивание (one, two, three) кортежу a присваивает каждое значение a каждой переменной: one, two и three по очереди. Это удобно, если нужно присвоить определенному количеству переменных значений в кортеже.

Выводы

Теперь вы знаете, что такое кортежи, как их создавать, какие самые распространенные операции, и как ими можно управлять. Также — распространенные методы структур Python. А в качестве бонуса научились присваивать нескольким переменным разные значения.

Кортежи — Основы языка Python

До этого момента мы встречались только с примитивными типами — строка, число, булев тип. Ещё нам знакомы функции и модули с пакетами (да, в Python модули и пакеты, это тоже значения специальных встроенных типов). Но часто в программировании приходится создавать более сложные значения, чем числа и строки, и манипулировать такими значениями. Именно поэтому во многих языках программирования есть составные типы. Значение составного типа может состоять как из значений примитивных типов, так и из значений других составных типов, таким образом составные типы позволяют описывать сущности произвольной сложности — и шахматные доски, и космические ракеты!

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

Кортежи

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

rgb_colour = (255, 127, 64)
name_and_age = ('Bob', 42)
three_booleans = (True, False, True)
two_pairs_of_numbers = ((1, 2), (3, 4))

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

not_a_tuple = (42)  # 42

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

tuple = (42,)  # (42,)

Да, форма записи довольно необычная, но вы привыкнете 🙂

Возврат нескольких значений из функции

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

def div_mod(a, b):
    quotient = a // b
    modulo = a % b
    return (quotient, modulo)

div_mod(13, 4)  # (3, 1)

Получение элементов кортежа по индексу

Выше мы только создавали кортежи. Теперь научимся их разбирать! В простейшем случае достаточно обратиться к элементу кортежа по индексу:

name_and_age = ('Bob', 42)

name_and_age[0]  # 'Bob'
name_and_age[1]  # 42

Также у кортежа есть длина, которую, как и для строки, можно получить с помощью функции len:

tuple = (42,)  # (42,)
len(tuple)     # 1
pair = (1, 2)  # (1, 2)
len(pair)      # 2

Деструктуризация

Обращение по индексу – это не самый удобный способ работы с кортежами. Дело в том, что кортежи часто содержат значения разных типов, и помнить, по какому индексу что лежит — очень непросто. Но есть способ лучше! Как мы кортеж собираем, так его можно и разобрать:

name_and_age = ('Bob', 42)

(name, age) = name_and_age
name  # 'Bob'
age   # 42

Именно таким способом принято получать и сразу разбирать значения, которые возвращает функция (если таковая возвращает несколько значений, конечно):

(quotient, modulo) = div_mod(13, 4)

Соответственно кортеж из одного элемента нужно разбирать так:

(a,) = (42,)
a  # 42

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

Кортежи, множественное присваивание и обмен значениями

Благодаря тому, что кортежи легко собирать и разбирать, в Python удобно делать такие вещи, как множественное присваивание. Смотрите:

(a, b, c) = (1, 2, 3)
a  # 1
b  # 2
c  # 3

Используя множественное присваивание, можно провернуть интересный трюк: обмен значениями между двумя переменными. Вот код:

a = 100
b = 'foo'

(a, b) = (b, a)
a  # 'foo'
b  # 100

Cтрочку (a, b) = (b, a) нужно понимать как «присвоить в а и b значения из кортежа, состоящего из значений переменных b и a«.

Ссылки


Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Введение в Python. Часть 7. Кортежи и множества

Вы уже знаете, что такое списки в Питоне и как с ними можно работать (если еще нет — вот урок по спискам). Помимо списков в Питоне есть еще такие структуры данных, как кортежи и множества.

Видео: Глеб Лиманский

В видео при создании словаря пропущена функция dict(). Приносим извинение за ошибку!

Кортежи (Tuples) 

Кортеж похож на список, но у них есть принципиальное различие: список — изменяемый тип данных, а кортеж нет. В этом различии кроется суть кортежей: они защищают данные от непреднамеренных изменений. Вторая причина, по которой используют кортежи, это экономия места. Они занимают меньше объема в памяти, чем списки.

Вспомним, как в уроке по спискам вы удаляли один элемент:

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

Что тогда вообще можно делать с кортежами, если они не изменяемы?

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

И можем еще просто удалить кортеж целиком:

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

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

Давайте создадим словарь с примерным автопарком Владимира Путина: это его личные автомобили из декларации и еще те, на которых он ездит.

Так как мы удалили предыдущий словарь, можем создать новый с таким же названием. Создаем список с автомобилями. И «сшиваем» с помощью функции-молнии — zip() — кортеж и список в словарь (можно было так соединить и два списка):

Словарь готов! Запомните эту функцию-молнию, она очень полезная.

Множества (Sets)

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

Создать пустое множество можно с помощью функции set(). А если с элементами, то с помощью их перечисления в фигурных скобках, как у словаря:

Все элементы множества всегда уникальные. Это полезное свойство множеств пригождается, когда вам нужно почистить ваш список и убрать дубли:

Получаем множество с уникальными элементами. Вернем его обратно в список с помощью функции list():

С множествами можно делать множество операций (избитая фраза, но все равно самая точная).

От самых простых таких, как добавление элемента и удаления:

Проверки наличия элемента в множестве:

До более сложных. Например, можно посмотреть пересечения множеств: то есть какие элементы входят в оба множества с помощью функции intersection():

Можем объединить два множества и получить третье, в котором останутся только уникальные элементы, использовав union():

А с помощью функции difference() узнаем разницy множеств: set1. difference(set2) даст нам ответ, какие элементы первого множества отсутствуют во втором множестве.

Если же хотим симметричную разницу между множествами: то есть все элементы, которые у них различны, а не общие. Применяем функцию symmetric_difference():

Все операции, доступные для множеств, можно посмотреть здесь.

Закончим на множестве, которое не изменяется, как и кортеж. Это frozenset. Преобразовываем свое множество во frozenset. И все: из него уже нельзя ничего удалить.

Тетрадка Jupyter Notebook с этого урока доступна на нашем GitHub.

Кортежи (tuple) в Python | Кодкамп

Индексирование кортежей

x = (1, 2, 3)
x[0]  # 1
x[1]  # 2
x[2]  # 3
x[3]  # IndexError: tuple index out of range
 

Индексирование с отрицательными числами начнется с последнего элемента как -1:

x[-1] # 3
x[-2] # 2
x[-3] # 1
x[-4] # IndexError: tuple index out of range

 

Индексирование ряда элементов

print(x[:-1])   # (1, 2)
print(x[-1:])   # (3,)
print(x[1:3])   # (2, 3) 

Кортежи неизменны

Одним из основных отличий между list s и tuple с в Python является то , что кортежи являются неизменяемыми, то есть, один не может добавлять или изменять элементы , как только кортеж инициализируются. Например:

>>> t = (1, 4, 9)
>>> t[0] = 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

Точно так же, кортежи не имеют .append и .extend методы , как list делает. Используя += возможно, но он изменяет связывание переменной, а не сам кортеж:

>>> t = (1, 2)
>>> q = t
>>> t += (3, 4)
>>> t
(1, 2, 3, 4) #output
>>> q
(1, 2) #output

 

Будьте осторожны при размещении изменяемых объектов, таких как lists , внутри кортежей. Это может привести к очень запутанным результатам при их изменении. Например:

>>> t = (1, 2, 3, [1, 2, 3])
(1, 2, 3, [1, 2, 3]) #output
>>> t[3] += [4, 5]

 

Будет как поднимать ошибку и изменить содержимое списка в кортеже:

TypeError: 'tuple' object does not support item assignment
>>> t
(1, 2, 3, [1, 2, 3, 4, 5]) #output

Вы можете использовать += оператору «добавить» в кортеж — это работает, создавая новый кортеж с новым элементом вы «добавленным» и назначить его в текущей переменной; старый кортеж не изменен, но заменен!

Это позволяет избежать преобразования в список и из списка, но это медленный процесс, и это плохая практика, особенно если вы собираетесь добавлять несколько раз.

Кортеж является элементарным измеримым и уравновешенным

hash( (1, 2) )  # ok
hash( ([], {"hello"})  # не ок, поскольку списки и множества не хешируемы

Таким образом, кортеж можно поставить внутри set или в качестве ключа в dict только тогда , когда каждый из его элементов может.

{ (1, 2) } #  ок
{ ([], {"hello"}) ) # не ок

Кортеж

Синтаксически, кортеж — это список значений через запятую:

t = 'a', 'b', 'c', 'd', 'e'

 

Хотя это и необязательно, обычно заключать кортежи в скобки:

t = ('a', 'b', 'c', 'd', 'e')

 

Создайте пустой кортеж с круглыми скобками:

t0 = ()
type(t0)            # <type 'tuple'>

 

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

t1 = 'a',
type(t1)              # <type 'tuple'>

 

Обратите внимание, что одно значение в скобках не является кортежем:

t2 = ('a')
type(t2)              # <type 'str'>

 

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

t2 = ('a',)
type(t2)              # <type 'tuple'>

 

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

t2 = ('a',)           # нотация одобрена PEP8
t2 = 'a',             # использовать эту нотацию PEP8 не рекомендует
t2 = ('a', )          # использовать эта нотацию PEP8 не рекомендует

 

Другой способ создать кортеж является встроенной функцией tuple .

t = tuple('lupins')
print(t)              # ('l', 'u', 'p', 'i', 'n', 's')
t = tuple(range(3))
print(t)              # (0, 1, 2)

Эти примеры основаны на материалах из книги Think Python Аллен B. Дауни.

Упаковка и распаковка кортежей

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

a = 1, 2, 3   # a является кортежем (1, 2, 3)

 

а также

a = (1, 2, 3) # a является кортежем (1, 2, 3)

 

эквивалентны. Присваивания a = 1, 2, 3 также называют упаковки , потому что пакеты значения вместе в кортеже.

Обратите внимание, что кортеж с одним значением также является кортежем. Чтобы сообщить Python, что переменная является кортежем, а не единственным значением, вы можете использовать запятую

a = 1  # a имеет значение 1
a = 1, # a это кортеж (1,)

 

Запятая нужна также, если вы используете скобки

a = (1,) # a это кортеж (1,)
a = (1)  # a имеет значение 1 и не является кортежем


 

Для распаковки значений из кортежа и выполнения нескольких назначений используйте

# unpacking AKA multiple assignment
x, y, z = (1, 2, 3) 
# x == 1
# y == 2
# z == 3

 

Символ _ может быть использован в качестве одноразового использования имени переменной , если нужно только некоторые элементы кортежа, действуя в качестве заполнителя:

 a = 1, 2, 3, 4
_, x, y, _ = a
# x == 2
# y == 3

 

Одноэлементные кортежи:

x, = 1,  # x это означение 1
x  = 1,  # x это кортеж (1,)


 

В Python 3 целевой переменной с * префикс может быть использован в качестве вдогонку всех переменных:

first, *more, last = (1, 2, 3, 4, 5)
#first == 1
#more == [2, 3, 4]
#last == 5

Реверсивные элементы

Обратные элементы в кортеже

colors = "red", "green", "blue"
rev = colors[::-1]
# rev: ("blue", "green", "red")

colors = rev
# colors: ("blue", "green", "red")

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

rev = tuple(reversed(colors))
# rev: ("blue", "green", "red")

colors = rev
# colors: ("blue", "green", "red") 

Встроенные функции кортежей

Кортежи поддерживают следующие встроенные функции

сравнение

Если элементы одного типа, python выполняет сравнение и возвращает результат. Если элементы разных типов, он проверяет, являются ли они числами.

  • Если числа, проведите сравнение.
  • Если один из элементов является числом, то возвращается другой элемент.
  • В противном случае типы сортируются по алфавиту.

Если мы достигли конца одного из списков, более длинный список будет «больше». Если оба списка одинаковы, возвращается 0.

tuple1 = ('a', 'b', 'c', 'd', 'e')
tuple2 = ('1','2','3')
tuple3 = ('a', 'b', 'c', 'd', 'e')

cmp(tuple1, tuple2) # 1

cmp(tuple2, tuple1) # -1

cmp(tuple1, tuple3) # 0

 

Длина кортежа

Функция len возвращает общую длину кортежа

len(tuple1) # 5

 

Max кортежа

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

max(tuple1) #'e'

max(tuple2) # '3'
 

Min кортежа

Функция min возвращает элемент из кортежа со значением min

min(tuple1) # 'a'

min(tuple2) # '1'

 

Преобразовать список в кортеж

Встроенная функция tuple преобразует список в кортеж.

list = [1,2,3,4,5]
tuple(list)

>>>Out: (1, 2, 3, 4, 5)
 

Конкатенация кортежей

Используйте + для конкатенации двух кортежей

tuple1 + tuple2

>>>Out: ('a', 'b', 'c', 'd', 'e', '1', '2', '3')

Python | Кортежи

Кортежи

Последнее обновление: 26.04.2017

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

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


user = ("Tom", 23)
print(user)

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


user = "Tom", 23
print(user)

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


user = ("Tom",)

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


users_list = ["Tom", "Bob", "Kate"]
users_tuple = tuple(users_list)
print(users_tuple)      # ("Tom", "Bob", "Kate")

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


users = ("Tom", "Bob", "Sam", "Kate")
print(users[0])     # Tom
print(users[2])     # Sam
print(users[-1])     # Kate

# получим часть кортежа со 2 элемента по 4
print(users[1:4])       # ("Bob", "Sam", "Kate")

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


users[1] = "Tim"

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


user = ("Tom", 22, False)
name, age, isMarried = user
print(name)             # Tom
print(age)              # 22
print(isMarried)        # False

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


def get_user():
    name = "Tom"
    age = 22
    is_married = False
    return name, age, is_married


user = get_user()
print(user[0])              # Tom
print(user[1])              # 22
print(user[2])              # False

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


user = ("Tom", 22, False)
print(len(user))		# 3

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

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


user = ("Tom", 22, False)
for item in user:
    print(item)

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


user = ("Tom", 22, False)

i = 0
while i < len(user):
    print(user[i])
    i += 1

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


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

Сложные кортежи

Один кортеж может содержать другие кортежи в виде элементов. Например:


countries = (
    ("Germany", 80.2, (("Berlin",3.326), ("Hamburg", 1.718))),
    ("France", 66, (("Paris", 2.2),("Marsel", 1.6)))
)

for country in countries:
    countryName, countryPopulation, cities = country
    print("\nCountry: {}  population: {}".format(countryName, countryPopulation))
    for city in cities:
        cityName, cityPopulation = city
        print("City: {}  population: {}". format(cityName, cityPopulation))

Здесь кортеж countries, который представляет страны, состоит из кортежей, каждый из которых — отдельная страна.

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

Кортеж Python (с примерами)

Кортеж в Python похож на список. Разница между ними в том, что мы не можем изменять элементы кортежа после его назначения, тогда как мы можем изменять элементы списка.


Создание кортежа

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

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

  # Различные типы кортежей

# Пустой кортеж
my_tuple = ()
печать (my_tuple)

# Кортеж с целыми числами
my_tuple = (1, 2, 3)
печать (my_tuple)

# кортеж со смешанными типами данных
my_tuple = (1, «Привет», 3.4)
печать (my_tuple)

# вложенный кортеж
my_tuple = ("мышь", [8, 4, 6], (1, 2, 3))
печать (my_tuple)  

Выход

  ()
(1, 2, 3)
(1, 'Привет', 3.4)
('мышь', [8, 4, 6], (1, 2, 3))  

Кортеж также можно создать без использования круглых скобок.Это известно как упаковка кортежей.

  my_tuple = 3, 4.6, "собака"
печать (my_tuple)

# также возможна распаковка кортежей
a, b, c = my_tuple

печать (а) # 3
print (b) # 4.6
print (c) # собака  

Выход

  (3, 4.6, 'собака')
3
4.6
собака  

Создание кортежа с одним элементом немного сложно.

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

  my_tuple = ("привет")
print (type (my_tuple)) # <класс 'str'>

# Создание кортежа из одного элемента
my_tuple = ("привет",)
print (type (my_tuple)) # <класс 'кортеж'>

# Скобки не обязательны
my_tuple = "привет",
print (type (my_tuple)) # <класс 'кортеж'>  

Выход

  <класс 'str'>
<класс 'кортеж'>
<класс 'кортеж'>  

Доступ к элементам кортежа

Существуют различные способы доступа к элементам кортежа.

1. Индексирование

Мы можем использовать оператор индекса [] для доступа к элементу в кортеже, где индекс начинается с 0.

Итак, кортеж, состоящий из 6 элементов, будет иметь индексы от 0 до 5. Попытка получить доступ к индексу за пределами диапазона индекса кортежа (6,7, … в этом примере) вызовет IndexError .

Индекс должен быть целым числом, поэтому мы не можем использовать float или другие типы. Это приведет к TypeError .

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

  # Доступ к элементам кортежа с помощью индексации
my_tuple = ('p', 'e', ​​'r', 'm', 'i', 'т')

print (my_tuple [0]) # 'p'
print (my_tuple [5]) # 'т'

# IndexError: список индекса вне допустимого диапазона
# print (my_tuple [6])

# Индекс должен быть целым числом
# TypeError: индексы списка должны быть целыми числами, а не с плавающей запятой
# my_tuple [2.0]

# вложенный кортеж
n_tuple = ("мышь", [8, 4, 6], (1, 2, 3))

# вложенный индекс
print (n_tuple [0] [3]) # 's'
print (число [1] [1]) # 4  

Выход

  с.
т
s
4  

2.Отрицательное индексирование

Python допускает отрицательную индексацию своих последовательностей.

Индекс -1 относится к последнему элементу, -2 — ко второму последнему элементу и так далее.

  # Отрицательная индексация для доступа к элементам кортежа
my_tuple = ('p', 'e', ​​'r', 'm', 'i', 'т')

# Вывод: 't'
печать (my_tuple [-1])

# Вывод: 'p'
печать (my_tuple [-6])  

Выход

  т
п  

3.

Нарезка

Мы можем получить доступ к диапазону элементов в кортеже, используя оператор среза двоеточие : .

  # Доступ к элементам кортежа с помощью нарезки
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

# элементы со 2-го по 4-й
# Вывод: ('r', 'o', 'g')
печать (my_tuple [1: 4])

# элементов начиная со 2-го
# Вывод: ('p', 'r')
печать (my_tuple [: - 7])

# элементы с 8-го до конца
# Вывод: ('i', 'z')
печать (my_tuple [7:])

# элемента от начала до конца
# Вывод: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
print (my_tuple [:])  

Выход

  ('г', 'о', 'г')
('п', 'г')
('я', 'я')
('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')  

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

Нарезка элементов в Python

Изменение кортежа

В отличие от списков, кортежи неизменяемы.

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

Мы также можем присвоить кортежу разные значения (переназначение).

  # Изменение значений кортежа
my_tuple = (4, 2, 3, [6, 5])


# TypeError: объект 'tuple' не поддерживает назначение элементов
# my_tuple [1] = 9

# Однако элемент изменяемого элемента может быть изменен
my_tuple [3] [0] = 9 # Вывод: (4, 2, 3, [9, 5])
печать (my_tuple)

# Кортежи можно переназначить
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

# Вывод: ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')
печать (my_tuple)  

Выход

  (4, 2, 3, [9, 5])
('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')  

Мы можем использовать оператор + для объединения двух кортежей.Это называется конкатенацией .

Мы также можем повторить элементов в кортеже заданное количество раз, используя оператор * .

Обе операции + и * приводят к созданию нового кортежа.

  # Конкатенация
# Вывод: (1, 2, 3, 4, 5, 6)
печать ((1, 2, 3) + (4, 5, 6))

# Повторить
# Вывод: ('Повторить', 'Повторить', 'Повторить')
print (("Повторить",) * 3)  

Выход

  (1, 2, 3, 4, 5, 6)
(«Повторить», «Повторить», «Повторить»)  

Удаление кортежа

Как обсуждалось выше, мы не можем изменять элементы в кортеже.Это означает, что мы не можем удалять или удалять элементы из кортежа.

Однако полное удаление кортежа возможно с помощью ключевого слова del.

  # Удаление кортежей
my_tuple = ('p', 'r', 'o', 'g', 'r', 'a', 'm', 'i', 'z')

# невозможно удалить элементы
# TypeError: объект 'tuple' не поддерживает удаление элемента
# del my_tuple [3]

# Можно удалить весь кортеж
дель my_tuple

# NameError: имя my_tuple не определено
печать (my_tuple)  

Выход

  Traceback (последний звонок последний):
  Файл «<строка>», строка 12, в <модуле>
NameError: имя my_tuple не определено  

Кортежные методы

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

Некоторые примеры методов кортежа Python:

  my_tuple = ('а', 'р', 'р', 'л', 'е',)

print (my_tuple.count ('p')) # Вывод: 2
print (my_tuple.index ('l')) # Вывод: 3  

Выход

  2
3  

Другие операции с кортежами

1. Тест на членство в кортеже

Мы можем проверить, существует ли элемент в кортеже или нет, используя ключевое слово в .

  # Тест на членство в кортеже
my_tuple = ('а', 'р', 'р', 'л', 'е',)

# В операции
print ('a' в my_tuple)
print ('b' в my_tuple)

# Не работает
print ('g' отсутствует в my_tuple)  

Выход

  Верно
Ложь
Правда  

2. Итерация по кортежу

Мы можем использовать цикл для для перебора каждого элемента в кортеже.

  # Использование цикла for для перебора кортежа
для имени в ('Джон', 'Кейт'):
    print («Привет», имя)  

Выход

  Привет, Джон
Привет Кейт  

Преимущества кортежа над списком

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

  • Обычно мы используем кортежи для разнородных (разных) типов данных и списки для однородных (похожих) типов данных.
  • Поскольку кортежи неизменяемы, итерация по кортежу выполняется быстрее, чем со списком. Так что есть небольшой прирост производительности.
  • Кортежи, содержащие неизменяемые элементы, могут использоваться в качестве ключа для словаря. Со списками это невозможно.
  • Если у вас есть данные, которые не меняются, их реализация в виде кортежа гарантирует, что они останутся защищенными от записи.

Кортежи Python — GeeksforGeeks

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

Значения кортежа синтаксически разделяются запятыми. Хотя в этом нет необходимости, обычно кортеж определяют, закрыв последовательность значений в круглых скобках.Это помогает легче понять кортежи Python.

Создание кортежа

В Python кортежи создаются путем размещения последовательности значений, разделенных «запятой», с использованием круглых скобок для группировки последовательности данных или без них.

Примечание. Создание кортежа Python без использования круглых скобок называется упаковкой кортежа.

Программа Python для демонстрации добавления элементов в кортеж.

Python3

Кортеж1 = ()

печать ( "Исходный пустой кортеж:" )

000

Tuple1 = ( 'Geeks' , 'For' )

print ( "\ nTuple) с использованием строки

печать (кортеж1)

список1 = [ 1 , 2 , 4 000 000 ]

печать ( "\ nTuple using List:" )

print ( кортеж (lis t1))

Tuple1 = кортеж ( 'Geeks' )

печать ( ) с использованием функции "" \ nTuple

печать (Tuple1)

Вывод:


 Начальный пустой кортеж:
()

Кортеж с использованием String:
("Компьютерщики", "Для")

Кортеж с использованием списка:
(1, 2, 4, 5, 6)

Кортеж с использованием функции:
('G', 'e', ​​'e', ​​'k', 's') 

Создание кортежа со смешанными типами данных.

Кортежи могут содержать любое количество элементов и любого типа данных (например, строки, целые числа, список и т. Д.). Кортежи также могут быть созданы из одного элемента, но это немного сложно. Одного элемента в круглых скобках недостаточно, в конце должна быть «запятая», чтобы сделать его кортежем.

Python3

Tuple1 = ( 5 , 'Добро пожаловать' , 7 000 000 000 000 000 000 print ( "\ nTuple with Mixed Datatypes:" )

print (Tuple1)

Tuple1 = 9000 ( 9000 ( 9000) , 2 , 3 )

Кортеж2 = ( 'python' , 'geek' ) (Tuple1, Tuple2)

print ( "\ nTuple с вложенными кортежами:" )

print (Tuple 3)

Tuple1 = ( 'Geeks' ,) * 3

печать (T с повторением T )

печать (кортеж1)

кортеж1 = ( 'Geeks' )

0003 9000000 9000000 9000000 9000000 9000000 9000000 9000000 "\ nTuple with a loop" )

for i in range ( int (n)):

(Tuple1,)

print (Tuple1)

Вывод:

 Tuple with Mixed Dat типы:
(5, «Добро пожаловать», 7, «Гики»)

Кортеж с вложенными кортежами:
((0, 1, 2, 3), ('питон', 'компьютерщик'))

Кортеж с повторением:
(Выродки, Выродки, Выродки)

Кортеж с петлей
("Гики",)
(('Гики',),)
((('Гики',),),)
(((('Гики',),),),)
((((('Geeks',),),),),) 

Доступ к кортежам

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

Примечание: При распаковке кортежа количество переменных в левой части должно быть равно количеству значений в данном кортеже a.

Python3

Tuple1 = кортеж ( "Geeks" )

print элемент " "

печать (Tuple1 [ 1 ])

Tuple1 = ( "Geeks" 000000000 "Компьютерщики" )

a, b, c = Tuple1

print ( "\ n Значения после распаковки:" print ) (а)

печать (б)

печать (в)

Выход:

 Первый элемент кортежа:
е

Значения после распаковки:
Компьютерщики
Для
Компьютерщики 



Объединение кортежей

Объединение кортежей - это процесс объединения двух или более кортежей.Объединение выполняется с помощью оператора «+». Объединение кортежей всегда выполняется с конца исходного кортежа. Другие арифметические операции не применяются к кортежам.
Примечание- Только одни и те же типы данных могут быть объединены с помощью конкатенации, ошибка возникает, если объединяются список и кортеж.

Python3

Кортеж1 = ( 0 , 1 , 000 000 9000 2 Tuple2 = ( 'Geeks' , 'For' , 'Geeks' )

Tuple3

печать ( "Кортеж 1:" )

печать (Кортеж1)

000 "печать 000" (000)

print (Tuple2)

print ( "\ nTuples after Concatenaton:" 900 08)

печать (Tuple3)

Вывод:

 Кортеж 1:
(0, 1, 2, 3)

Tuple2:
("Гики", "Для", "Гики")

Кортежи после объединения:
(0, 1, 2, 3, "Гики", "Для", "Гики") 

Нарезка кортежа

Нарезка кортежа выполняется для получения определенного диапазона или фрагмента подэлементов из кортежа .Нарезка также может выполняться для списков и массивов. Индексирование в списке приводит к выборке одного элемента, тогда как Slicing позволяет извлекать набор элементов.
Примечание. Значения отрицательного приращения также могут использоваться для изменения последовательности кортежей

Python3

Tuple1 = 9000EE9 000 кортеж )

print ( «Удаление первого элемента:» )

print (Tuple1 [ 1 000

]

]) ( "\ nTuple после того, как последовательность Element меняется на противоположную:" )

print (Tuple1 [:: - 1 ]])

print

print ( "\ nПечать элементов в диапазоне 4-9:" )

print (Tuple1 [ 4 : 9000 9 9 ])

Выход:

 Удаление первого элемента:
('E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S')

Кортеж после того, как последовательность Element меняется на обратную:
('S', 'K', 'E', 'E', 'G', 'R', 'O', 'F', 'S', 'K', 'E', 'E', ' ГРАММ')

Элементы печати в диапазоне 4-9:
('S', 'F', 'O', 'R', 'G') 



Удаление кортежа

Кортежи неизменяемы и, следовательно, они не позволяют удалить часть их.Весь кортеж удаляется с помощью метода del ().

Примечание - Печать кортежа после удаления приводит к ошибке.

Python

Кортеж1 = ( 0 , 1 , 2 9000, 000, 000

del Tuple1

print (Tuple1)

Traceback (последний звонок последний):
File «/ home / ee»py ”, строка 7, в
print (Tuple1)
NameError: имя Tuple1 не определено

Встроенные методы
Встроенный метод Описание
index () находит в кортеже и возвращает индекс данного значения там, где он доступен
count () возвращает частоту появления указанного значения
Встроенные функции
Встроенные функции Описание
all () Возвращает true, если все элементы истинны или если кортеж пуст
any () return true, если любой элемент кортежа истинен.если кортеж пуст, вернуть false
len () Возвращает длину кортежа или размер кортежа
enumerate () Возвращает объект перечисления кортежа
max () max () max () максимальный элемент заданного кортежа
min () вернуть минимальный элемент заданного кортежа
sum () Суммирует числа в кортеже
sorted () входных элементов в кортеже и вернуть новый отсортированный список
tuple () Преобразовать итерацию в кортеж.

Последние статьи о кортежах

Кортежные программы

Полезные ссылки:

Внимание, компьютерщик! Укрепите свои основы с помощью курса Python Programming Foundation и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS . И чтобы начать свое путешествие по машинному обучению, присоединитесь к Машинное обучение - курс базового уровня


Кортежей в Python - GeeksforGeeks

Кортеж - это набор объектов Python, разделенных запятыми.В некотором смысле кортеж похож на список с точки зрения индексации, вложенных объектов и повторения, но кортеж неизменен, в отличие от изменяемых списков.

Создание кортежей

900

empty_tuple = ()

печать (пустая_tuple)

tup = 'python' , 'geeks'

print (tup)

000 0009000000 python ' , ' geeks ' )

print (tup)

Output

 (' python ',' geeks ')
('python', 'geeks') 

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


Объединение кортежей

кортеж1 = ( 0 , , )

кортеж2 = ( 'python' , 'geek' )

печать

Выход:

(0, 1, 2, 3, 'python', 'geek') 

Вложение кортежей

кортеж1 = (0 ( ) 1 , 2 , 3 )

кортеж2 = ( 'python' , '' geple = (кортеж1, кортеж2)

печать (кортеж3)

Вывод:

 ((0, 1, 2, 3), ('python', 'geek' )) 

Повторение в кортежах



кортеж3 = ( 'python' 0009, 0009print (tuple3)

Вывод

 ('python', 'python', 'python') 

Попробуйте выполнить вышеуказанное без запятой и проверьте.Вы получите tuple3 как строку «pythonpythonpython».

Неизменяемые кортежи

кортеж1 = ( 0 , , 0009000

кортеж1 [ 0 ] = 4

печать (кортеж1)

Выходные данные

 обратный вызов (последний вызов трассировки)
  Файл "e0eaddff843a8695575daec34506f126.py ", строка 3, в
    tuple1 [0] = 4
TypeError: объект 'tuple' не поддерживает назначение элемента 

Нарезка кортежей

tuple1 = ( 0, 0, 0, 0 2 , 3 )

печать (кортеж1 [ 1 :])

печать (кортеж1 [- 000 [- 000] 000 [- 000] ])

печать (кортеж1 [ 2 : 4 ])

Выход

 (1, 2, 3)
(3, 2, 1, 0)
(2, 3) 

Удаление кортежа



кортеж3 = ( 0 , 9000, 9000 del tuple3

print (tuple3)

Ошибка:

 Traceback (последний вызов последний):
  Файл "d727db1dc9118a5250bf04dafbd.py ", строка 6, в 
    печать (кортеж3)
NameError: имя 'tuple3' не определено 

Вывод:

 (0, 1) 

Определение длины кортежа

tuple2 = 'python' , 'geek' )

print ( len (tuple2))

Преобразование списка

в кортеж

list1 = [ 0 , 1 , print 2 000] кортеж (список1))

печать ( кортеж ( 'python' ))

9 0439

Выход

 (0, 1, 2)
('p', 'y', 't', 'h', 'o', 'n') 

Принимает единственный параметр, который может быть списком, строкой, набором или даже словарем (в качестве elements) и преобразует их в кортеж.


Кортежи в цикле

tup = ( 'geek' ,)

для i в диапазоне ( int (n)):

tup = (, , , 000000 (tup)

Выход:

 (('geek',),)
((('Компьютерщик',),),)
(((('Компьютерщик',),),),)
((((('Компьютерщик',),),),),)
(((((('Компьютерщик',),),),),),)
 

Использование cmp (), max (), min ()

tuple1 = ( 'python' , , )

кортеж2 = ( 'кодер' , 1 )

, если = 0 ):

печать ( )

печать ( 'То же' )

печать ( 'Максимальный элемент в тупе les 1,2: ' +

str ( max (tuple1)) + ', ' +

9000 max (tuple2)))

print ( 'Минимальный элемент в кортежах 1,2:' +

str ( min ( min) ) + ',' + str ( min (tuple2)))

Выход

 Не то же самое
Максимальный элемент в кортежах 1,2: python, coder
Минимальный элемент в кортежах 1,2: geek, 1
 

Примечание: max () и min () проверяют на основе значений ASCII.Если в кортеже две строки, то проверяется первый другой символ в строках.

Эта статья предоставлена ​​ Шри Санкетом Уппалапати. Пожалуйста, напишите комментарий, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Внимание компьютерщик! Укрепите свои основы с помощью курса Python Programming Foundation и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS .И чтобы начать свое путешествие по машинному обучению, присоединитесь к Машинное обучение - курс базового уровня


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

Список может содержать любой набор объектов. Все элементы списка могут быть одного типа:

>>>
  >>> a = [2, 4, 6, 8]
>>> а
[2, 4, 6, 8]
  
>>>
  >>> a = [21.42, 'foobar', 3, 4, 'bark', False, 3.14159]
>>> а
[21.42, 'foobar', 3, 4, 'bark', Ложь, 3.14159]
  

Списки могут даже содержать сложные объекты, такие как функции, классы и модули, о которых вы узнаете в следующих руководствах:

>>>
  >>> int
<класс 'int'>
>>> len
<встроенная функция len>
>>> def foo ():
...     проходить
...
>>> фу
<функция foo в 0x035B9030>
>>> импорт математики
>>> математика
<модуль 'math' (встроенный)>

>>> a = [int, len, foo, math]
>>> а
[<класс 'int'>, <встроенная функция len>, <функция foo в 0x02CA2618>,
<модуль 'math' (встроенный)>]
  

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

>>>
  >>> a = []
>>> а
[]

>>> а = ['фу']
>>> а
['фу']

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
... 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
... 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
... 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
... 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
>>> а
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
97, 98, 99, 100]
  

Объекты списка не обязательно должны быть уникальными.Данный объект может появляться в списке несколько раз:

Кортежи Python: пошаговое руководство

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


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

В этом руководстве мы разберем основы типа данных кортеж. Мы обсудим его назначение и приведем примеры, демонстрирующие, как вы можете работать с этим типом данных.

Понимание кортежей Python

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

Найди свой матч на тренировочном лагере

Шоколад Ваниль Мята Клубника Choc-Chip
1 2 3 4
Шоколад Ваниль Мята Клубника Choc-Chip
-5-4-3-2 -1

Python Tuple используется для хранения последовательности неизменяемых объектов Python. Кортеж похож на списки, поскольку значение элементов, хранящихся в списке, может быть изменено, тогда как кортеж является неизменным, а значение элементов, хранящихся в кортеже, не может быть изменено.

Создание кортежа

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

T1 = (101, «Питер», 22) T2 = («Яблоко», «Банан», «Апельсин») Т3 = 10,20,30,40,50 печать (введите (T1)) печать (введите (T2)) печать (тип (Т3))

Выход:

 <класс 'кортеж'>
<класс 'кортеж'>
<класс 'кортеж'>
 
Примечание. Кортеж, созданный без скобок, также известен как упаковка кортежей.

Пустой кортеж можно создать следующим образом.

T4 = ()

Создание кортежа с одним элементом немного отличается.Нам нужно будет поставить запятую после элемента, чтобы объявить кортеж.

tup1 = ("JavaTpoint") печать (введите (tup1)) # Создание кортежа с одним элементом tup2 = ("JavaTpoint",) печать (введите (tup2))

Выход:

 <класс 'str'>
<класс 'кортеж'>
 

Кортеж индексируется так же, как списки. Доступ к элементам в кортеже можно получить, используя их конкретное значение индекса.

Рассмотрим следующий пример кортежа:

Пример - 1

кортеж1 = (10, 20, 30, 40, 50, 60) печать (кортеж1) count = 0 для i в кортеже1: print ("tuple1 [% d] =% d"% (count, i)) count = count + 1

Выход:

 (10, 20, 30, 40, 50, 60)
tuple1 [0] = 10
tuple1 [1] = 20
tuple1 [2] = 30
tuple1 [3] = 40
tuple1 [4] = 50
tuple1 [5] = 60
 

Пример - 2

tuple1 = tuple (input ("Введите элементы кортежа... ")) печать (кортеж1) count = 0 для i в кортеже1: print ("tuple1 [% d] =% s"% (count, i)) count = count + 1

Выход:

 Введите элементы кортежа ... 123456
('1', '2', '3', '4', '5', '6')
tuple1 [0] = 1
tuple1 [1] = 2
tuple1 [2] = 3
tuple1 [3] = 4
tuple1 [4] = 5
tuple1 [5] = 6
 

Кортеж индексируется так же, как списки. Доступ к элементам в кортеже можно получить, используя их конкретное значение индекса.

Мы увидим все эти аспекты кортежа в этом разделе руководства.

Индексирование и нарезка кортежей

Индексирование и срезы в кортеже аналогичны спискам. Индексация в кортеже начинается с 0 и продолжается до длины (кортежа) - 1.

Доступ к элементам в кортеже можно получить с помощью оператора index []. Python также позволяет нам использовать оператор двоеточия для доступа к нескольким элементам в кортеже.

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

Рассмотрим следующий пример:

tup = (1,2,3,4,5,6,7) печать (tup [0]) печать (tup [1]) печать (туп [2]) # Это выдаст IndexError печать (tup [8])

Выход:

 1
2
3
индекс кортежа вне допустимого диапазона
 

В приведенном выше коде кортеж состоит из 7 элементов, которые обозначают от 0 до 6.Мы попытались получить доступ к элементу вне кортежа, который вызвал ошибку IndexError .

кортеж = (1,2,3,4,5,6,7) # элемент 1 до конца печать (кортеж [1:]) #element от 0 до 3 element печать (кортеж [: 4]) #element с 1 по 4 элемент печать (кортеж [1: 5]) # элемент от 0 до 6 и сделать шаг 2 печать (кортеж [0: 6: 2])

Выход:

 (2, 3, 4, 5, 6, 7)
(1, 2, 3, 4)
(1, 2, 3, 4)
(1, 3, 5)
 

Отрицательное индексирование

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

Элементы слева направо перемещаются с использованием отрицательной индексации. Рассмотрим следующий пример:

кортеж1 = (1, 2, 3, 4, 5) печать (кортеж1 [-1]) печать (кортеж1 [-4]) печать (кортеж1 [-3: -1]) печать (кортеж1 [: - 1]) печать (кортеж1 [-2:])

Выход:

 5
2
(3, 4)
(1, 2, 3, 4)
(4, 5)
 

Удаление кортежа

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

Рассмотрим следующий пример.

кортеж1 = (1, 2, 3, 4, 5, 6) печать (кортеж1) дель кортеж1 [0] печать (кортеж1) дель кортеж1 печать (кортеж1)

Выход:

 (1, 2, 3, 4, 5, 6)
Отслеживание (последний вызов последний):
  Файл "tuple.py", строка 4, в 
    печать (кортеж1)
NameError: имя 'tuple1' не определено
 

Основные операции с кортежами

Такие операторы, как конкатенация (+), повторение (*), членство (в), работают так же, как они работают со списком.Для получения более подробной информации рассмотрите следующую таблицу.

Допустим, объявлены Tuple t = (1, 2, 3, 4, 5) и Tuple t1 = (6, 7, 8, 9).

Оператор Описание Пример
Повтор Оператор повторения позволяет многократно повторять элементы кортежа.
 T1 * 2 = (1, 2, 3, 4, 5, 1, 2, 3, 4, 5) 
Конкатенация Он объединяет кортеж, указанный по обе стороны от оператора.
 Т1 + Т2 = (1, 2, 3, 4, 5, 6, 7, 8, 9) 
Членство Возвращает истину, если в кортеже существует конкретный элемент, иначе ложь
 print (2 in T1) печатает True. 
Итерация Цикл for используется для перебора элементов кортежа.
 для i в T1:
    печать (я) 
Выход
 1
2
3
4
5 
Длина Используется для получения длины кортежа.
 длина (T1) = 5 

Python Встроенные функции кортежа

SN Функция Описание
1 cmp (кортеж1, кортеж2) Он сравнивает два кортежа и возвращает истину, если кортеж1 больше, чем кортеж2, в противном случае - ложь.
2 len (кортеж) Вычисляет длину кортежа.
3 макс. (Кортеж) Возвращает максимальный элемент кортежа
4 мин (кортеж) Возвращает минимальный элемент кортежа.
5 кортеж (seq) Преобразует указанную последовательность в кортеж.

Где использовать кортеж?

Использование кортежа вместо списка используется в следующем сценарии.

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

2. Кортеж может имитировать словарь без ключей. Рассмотрим следующую вложенную структуру, которую можно использовать как словарь.

[(101, «Джон», 22), (102, «Майк», 28), (103, «Дастин», 30)]

Список vs.Кортеж

SN Список Кортеж
1 Буквальный синтаксис списка показан []. Буквальный синтаксис кортежа показан с помощью (). 2 Список изменяемый. Кортеж неизменен. 3 Список имеет переменную длину. Кортеж имеет фиксированную длину. 4 Список предоставляет больше функций, чем кортеж. Кортеж обеспечивает меньшую функциональность, чем список. 5 Список используется в сценарии, в котором нам нужно хранить простые коллекции без ограничений, в которых значение элементов может быть изменено. Кортеж используется в тех случаях, когда нам нужно хранить коллекции только для чтения, т.е. значение элементов не может быть изменено. Его можно использовать как ключ внутри словаря. 6 Списки менее эффективны с точки зрения памяти, чем кортежи. Кортежи более эффективны с точки зрения памяти из-за их неизменности.