0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>24 ноя 2023</li>
2
<ul><li>24 ноя 2023</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>База "змееуста": работаем с индексами, сравниваем и перебираем элементы.</p>
4
</ul><p>База "змееуста": работаем с индексами, сравниваем и перебираем элементы.</p>
5
<p>Фото: Justin Sullivan / Getty Images</p>
5
<p>Фото: Justin Sullivan / Getty Images</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
7
<p><strong>Кортежи</strong>(<strong>тип tuple</strong>) - это неизменяемый тип данных в Python, который используется для хранения упорядоченной последовательности элементов.</p>
7
<p><strong>Кортежи</strong>(<strong>тип tuple</strong>) - это неизменяемый тип данных в Python, который используется для хранения упорядоченной последовательности элементов.</p>
8
<p>У этих коллекций есть три замечательных свойства:</p>
8
<p>У этих коллекций есть три замечательных свойства:</p>
9
<p><strong>Неизменяемость.</strong>После того как кортеж создан, в него нельзя добавлять элементы, а также изменять их или удалять. При попытке это сделать интерпретатор выдаст ошибку TypeError.</p>
9
<p><strong>Неизменяемость.</strong>После того как кортеж создан, в него нельзя добавлять элементы, а также изменять их или удалять. При попытке это сделать интерпретатор выдаст ошибку TypeError.</p>
10
<p><strong>Упорядоченность.</strong>Элементы кортежа располагаются в определённом порядке, который тоже неизменяем. К любому элементу можно обратиться по его индексу (порядковому номеру).</p>
10
<p><strong>Упорядоченность.</strong>Элементы кортежа располагаются в определённом порядке, который тоже неизменяем. К любому элементу можно обратиться по его индексу (порядковому номеру).</p>
11
<p><strong>Элементами кортежа могут быть объекты разных типов данных</strong>: числа, строки, списки, другие кортежи и другие. Элементы-коллекции могут иметь неограниченную глубину вложенности. Например, кортеж может включать в себя список, который будет содержать другой список, который вновь будет содержать список и так далее.</p>
11
<p><strong>Элементами кортежа могут быть объекты разных типов данных</strong>: числа, строки, списки, другие кортежи и другие. Элементы-коллекции могут иметь неограниченную глубину вложенности. Например, кортеж может включать в себя список, который будет содержать другой список, который вновь будет содержать список и так далее.</p>
12
<p>Кортежи записываются с использованием круглых скобок ():</p>
12
<p>Кортежи записываются с использованием круглых скобок ():</p>
13
my_tuple = (значение1, значение2...)<p>my_tuple - имя переменной, которой присваивается кортеж.</p>
13
my_tuple = (значение1, значение2...)<p>my_tuple - имя переменной, которой присваивается кортеж.</p>
14
<p>(значение1, значение2...) - это сам кортеж, который содержит элементы значение1, значение2 и так далее.</p>
14
<p>(значение1, значение2...) - это сам кортеж, который содержит элементы значение1, значение2 и так далее.</p>
15
<p>Они могут состоять из элементов разных типов и их сочетаний:</p>
15
<p>Они могут состоять из элементов разных типов и их сочетаний:</p>
16
# Кортеж из чисел, в том числе с плавающей точкой и комплексных numbers_tuple = (1, 2, 3, 4, 5, 2.5, 3 + 4j) # Кортеж из строк fruits_tuple = ('яблоко', 'банан', 'апельсин') # Кортеж из логических значений my_tuple = (True, False) # Кортеж из других кортежей nested_tuple = ((1, 2), ('a', 'b')) # Кортеж из списков my_tuple = ([1, 2, 3], ['a', 'b', 'c']) # Кортеж из словарей my_tuple = ({'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}) # Кортеж из разных типов данных mixed_tuple = (1, 'hello', [1, 2, 3], {'a': 10})<p>Применение кортежей связано с их свойствами - неизменяемостью и строгим порядком элементов. Разберём ситуации, когда это полезно.</p>
16
# Кортеж из чисел, в том числе с плавающей точкой и комплексных numbers_tuple = (1, 2, 3, 4, 5, 2.5, 3 + 4j) # Кортеж из строк fruits_tuple = ('яблоко', 'банан', 'апельсин') # Кортеж из логических значений my_tuple = (True, False) # Кортеж из других кортежей nested_tuple = ((1, 2), ('a', 'b')) # Кортеж из списков my_tuple = ([1, 2, 3], ['a', 'b', 'c']) # Кортеж из словарей my_tuple = ({'name': 'Alice', 'age': 30}, {'name': 'Bob', 'age': 25}) # Кортеж из разных типов данных mixed_tuple = (1, 'hello', [1, 2, 3], {'a': 10})<p>Применение кортежей связано с их свойствами - неизменяемостью и строгим порядком элементов. Разберём ситуации, когда это полезно.</p>
17
<p>Если нужно защитить данные от случайного или намеренного изменения, то можно использовать кортежи. Например, этот тип данных подойдёт для сохранения информации о датах рождения клиентов.</p>
17
<p>Если нужно защитить данные от случайного или намеренного изменения, то можно использовать кортежи. Например, этот тип данных подойдёт для сохранения информации о датах рождения клиентов.</p>
18
<p>Обратите внимание: неизменяемость кортежей не абсолютна. У неё есть исключение - если внутри кортежа находятся изменяемые элементы, например списки, словари или множества, то их значения можно изменить.</p>
18
<p>Обратите внимание: неизменяемость кортежей не абсолютна. У неё есть исключение - если внутри кортежа находятся изменяемые элементы, например списки, словари или множества, то их значения можно изменить.</p>
19
<p>Например:</p>
19
<p>Например:</p>
20
# Кортеж с изменяемыми элементами: mutable_tuple = ([1, 2, 3], [4, 5, 6]) print('Исходный кортеж:', mutable_tuple) # Изменение содержимого списка внутри кортежа mutable_tuple[0][1] = 10 # Меняем второй элемент в первом списке mutable_tuple[1].append(7) # Добавляем ко второму списку новое значение print('Изменённый кортеж:', mutable_tuple)<p>Результат выполнения кода:</p>
20
# Кортеж с изменяемыми элементами: mutable_tuple = ([1, 2, 3], [4, 5, 6]) print('Исходный кортеж:', mutable_tuple) # Изменение содержимого списка внутри кортежа mutable_tuple[0][1] = 10 # Меняем второй элемент в первом списке mutable_tuple[1].append(7) # Добавляем ко второму списку новое значение print('Изменённый кортеж:', mutable_tuple)<p>Результат выполнения кода:</p>
21
Исходный кортеж: ([1, 10, 3], [4, 5, 6]) Изменённый кортеж: ([1, 10, 3], [4, 5, 6, 7])<p>Как видите, никакой ошибки нет, хотя кортеж изменился.</p>
21
Исходный кортеж: ([1, 10, 3], [4, 5, 6]) Изменённый кортеж: ([1, 10, 3], [4, 5, 6, 7])<p>Как видите, никакой ошибки нет, хотя кортеж изменился.</p>
22
<p>Кортежи занимают в памяти меньше места, чем списки. Это легко проверить:</p>
22
<p>Кортежи занимают в памяти меньше места, чем списки. Это легко проверить:</p>
23
a = (10, 20, 30, 40, 50, 60) # Кортеж b = [10, 20, 30, 40, 50, 60] # Список print(a.__sizeof__()) # Размер кортежа print(b.__sizeof__()) # Размер списка<p>В результате выполнения кода получим:</p>
23
a = (10, 20, 30, 40, 50, 60) # Кортеж b = [10, 20, 30, 40, 50, 60] # Список print(a.__sizeof__()) # Размер кортежа print(b.__sizeof__()) # Размер списка<p>В результате выполнения кода получим:</p>
24
72 88<p>Кортеж занимает в памяти на 16 байт меньше, чем список. Из-за малой величины сравниваемых объектов разница почти незаметна, но при работе с данными большего объёма экономия может быть значимой.</p>
24
72 88<p>Кортеж занимает в памяти на 16 байт меньше, чем список. Из-за малой величины сравниваемых объектов разница почти незаметна, но при работе с данными большего объёма экономия может быть значимой.</p>
25
<p>Кортежи идеально подходят для использования в качестве ключей в словарях, так как ключи в них должны быть объектами неизменяемого типа данных. Проверим это:</p>
25
<p>Кортежи идеально подходят для использования в качестве ключей в словарях, так как ключи в них должны быть объектами неизменяемого типа данных. Проверим это:</p>
26
# Создаём словарь с кортежем в качестве ключа my_dict = {('a', 1): 'value1', ('b', 2): 'value2'} # Обращаемся к элементам словаря по кортежу в качестве ключа print(my_dict[('a', 1)]) # Вывод: value1 print(my_dict[('b', 2)]) # Вывод: value2 # Добавляем новый элемент с кортежем в качестве ключа my_dict[('c', 3)] = 'value3' # Выводим содержимое словаря print(my_dict)<p>В результате получим:</p>
26
# Создаём словарь с кортежем в качестве ключа my_dict = {('a', 1): 'value1', ('b', 2): 'value2'} # Обращаемся к элементам словаря по кортежу в качестве ключа print(my_dict[('a', 1)]) # Вывод: value1 print(my_dict[('b', 2)]) # Вывод: value2 # Добавляем новый элемент с кортежем в качестве ключа my_dict[('c', 3)] = 'value3' # Выводим содержимое словаря print(my_dict)<p>В результате получим:</p>
27
value1 value2 {('a', 1): 'value1', ('b', 2): 'value2', ('c', 3): 'value3'}<p>С кортежем словарь работает. Если попытаться в качестве ключа использовать список, то возникнет ошибка, так как списки - изменяемый тип данных.</p>
27
value1 value2 {('a', 1): 'value1', ('b', 2): 'value2', ('c', 3): 'value3'}<p>С кортежем словарь работает. Если попытаться в качестве ключа использовать список, то возникнет ошибка, так как списки - изменяемый тип данных.</p>
28
<p>Рассмотрим основные операции с кортежами.</p>
28
<p>Рассмотрим основные операции с кортежами.</p>
29
<p>Создать кортеж в Python можно по меньшей мере пятью способами. Рассмотрим каждый из них.</p>
29
<p>Создать кортеж в Python можно по меньшей мере пятью способами. Рассмотрим каждый из них.</p>
30
<ul><li>С помощью круглых скобок:</li>
30
<ul><li>С помощью круглых скобок:</li>
31
</ul>my_tuple = (1, 2, 3, 'a', 'b', 'c')<ul><li>Без круглых скобок:</li>
31
</ul>my_tuple = (1, 2, 3, 'a', 'b', 'c')<ul><li>Без круглых скобок:</li>
32
</ul>my_tuple = 1, 2, 3, 'a', 'b', 'c'<ul><li>Используя встроенную функцию tuple():</li>
32
</ul>my_tuple = 1, 2, 3, 'a', 'b', 'c'<ul><li>Используя встроенную функцию tuple():</li>
33
</ul>my_tuple = tuple([1, 2, 3, 'a', 'b', 'c'])<ul><li>С помощью оператора упаковки, который мы разберём дальше:</li>
33
</ul>my_tuple = tuple([1, 2, 3, 'a', 'b', 'c'])<ul><li>С помощью оператора упаковки, который мы разберём дальше:</li>
34
</ul>a = 1 b = 2 c = 3 my_tuple = a, b, c # Эквивалентно (a, b, c)<ul><li>Из итерируемого элемента, например строки, с помощью функции tuple():</li>
34
</ul>a = 1 b = 2 c = 3 my_tuple = a, b, c # Эквивалентно (a, b, c)<ul><li>Из итерируемого элемента, например строки, с помощью функции tuple():</li>
35
</ul>my_tuple = tuple('hello') # Результат: ('h', 'e', 'l', 'l', 'o')<p>Можно создать пустой кортеж:</p>
35
</ul>my_tuple = tuple('hello') # Результат: ('h', 'e', 'l', 'l', 'o')<p>Можно создать пустой кортеж:</p>
36
empty_tuple = ()<p>Если требуется кортеж, состоящий всего из одного элемента, то после элемента необходимо обязательно поставить запятую:</p>
36
empty_tuple = ()<p>Если требуется кортеж, состоящий всего из одного элемента, то после элемента необходимо обязательно поставить запятую:</p>
37
single_element_tuple = (42,) # Или так single_element_tuple = 42, # Если запятую не поставить, то получим объект типа int single_element_tuple = (42)<p>Кортеж - это упорядоченная последовательность. Поэтому для доступа к его элементам можно использовать индексы.</p>
37
single_element_tuple = (42,) # Или так single_element_tuple = 42, # Если запятую не поставить, то получим объект типа int single_element_tuple = (42)<p>Кортеж - это упорядоченная последовательность. Поэтому для доступа к его элементам можно использовать индексы.</p>
38
<p>Индексация начинается с нуля и заканчивается значением, равным длине кортежа, уменьшенным на единицу:</p>
38
<p>Индексация начинается с нуля и заканчивается значением, равным длине кортежа, уменьшенным на единицу:</p>
39
# Кортеж из шести элементов my_tuple = (1, 2, 3, 'a', 'b', 'c') # Доступ к элементам по индексу first_element = my_tuple[0] # Первый элемент second_element = my_tuple[1] # Второй элемент third_element = my_tuple[2] # Третий элемент last_element = my_tuple[5] # Последний элемент # Вывод значений print(first_element) # Вывод: 1 print(second_element) # Вывод: 2 print(third_element) # Вывод: 3 print(last_element) # Вывод: 'c'<p>Для доступа к элементам с конца кортежа можно использовать отрицательные индексы. В этом случае индексация начинается с -1 и заканчивается значением, равным длине кортежа со знаком минус.</p>
39
# Кортеж из шести элементов my_tuple = (1, 2, 3, 'a', 'b', 'c') # Доступ к элементам по индексу first_element = my_tuple[0] # Первый элемент second_element = my_tuple[1] # Второй элемент third_element = my_tuple[2] # Третий элемент last_element = my_tuple[5] # Последний элемент # Вывод значений print(first_element) # Вывод: 1 print(second_element) # Вывод: 2 print(third_element) # Вывод: 3 print(last_element) # Вывод: 'c'<p>Для доступа к элементам с конца кортежа можно использовать отрицательные индексы. В этом случае индексация начинается с -1 и заканчивается значением, равным длине кортежа со знаком минус.</p>
40
<p>Напишем код:</p>
40
<p>Напишем код:</p>
41
my_tuple = (1, 2, 3, 'a', 'b', 'c') last_element = my_tuple[-1] # Первый элемент с конца second_to_last_element = my_tuple[-2] # Второй элемент с конца first_element = my_tuple[-6] # Последний элемент с конца, он же первый с начала print(last_element) # Вывод: 'c' print(second_to_last_element) # Вывод: 'b' print(first_element) # Вывод: 1<p>Чтобы обратиться ко вложенным элементам, используйте двойную индексацию:</p>
41
my_tuple = (1, 2, 3, 'a', 'b', 'c') last_element = my_tuple[-1] # Первый элемент с конца second_to_last_element = my_tuple[-2] # Второй элемент с конца first_element = my_tuple[-6] # Последний элемент с конца, он же первый с начала print(last_element) # Вывод: 'c' print(second_to_last_element) # Вывод: 'b' print(first_element) # Вывод: 1<p>Чтобы обратиться ко вложенным элементам, используйте двойную индексацию:</p>
42
nested_tuple = (1, 2, (3, 4), 5) # Обращение к элементам кортежа верхнего уровня print(nested_tuple[0]) # Вывод: 1 print(nested_tuple[3]) # Вывод: 5 # Обращение к элементам вложенного кортежа (3, 4) print(nested_tuple[2]) # Вывод: (3, 4) print(nested_tuple[2][0]) # Вывод: 3 print(nested_tuple[2][1]) # Вывод: 4<p>Разберём код. Кортеж nested_tuple содержит вложенный кортеж (3, 4). Для доступа к элементам вложенного кортежа используем двойную индексацию: nested_tuple[2][0] обращается к первому элементу вложенного кортежа, а nested_tuple[2][1] обращается ко второму элементу.</p>
42
nested_tuple = (1, 2, (3, 4), 5) # Обращение к элементам кортежа верхнего уровня print(nested_tuple[0]) # Вывод: 1 print(nested_tuple[3]) # Вывод: 5 # Обращение к элементам вложенного кортежа (3, 4) print(nested_tuple[2]) # Вывод: (3, 4) print(nested_tuple[2][0]) # Вывод: 3 print(nested_tuple[2][1]) # Вывод: 4<p>Разберём код. Кортеж nested_tuple содержит вложенный кортеж (3, 4). Для доступа к элементам вложенного кортежа используем двойную индексацию: nested_tuple[2][0] обращается к первому элементу вложенного кортежа, а nested_tuple[2][1] обращается ко второму элементу.</p>
43
<p>Упаковка (packing) и распаковка (unpacking) - это операции, которые позволяют создавать кортеж из набора значений и извлекать значения из кортежа в переменные. Рассмотрим их подробнее.</p>
43
<p>Упаковка (packing) и распаковка (unpacking) - это операции, которые позволяют создавать кортеж из набора значений и извлекать значения из кортежа в переменные. Рассмотрим их подробнее.</p>
44
<p><strong>Упаковка кортежа.</strong>Значения 1, 2, 3 и 'hello' автоматически упаковываются в кортеж:</p>
44
<p><strong>Упаковка кортежа.</strong>Значения 1, 2, 3 и 'hello' автоматически упаковываются в кортеж:</p>
45
my_tuple = 1, 2, 3, 'hello' # В переменной my_tuple теперь находится кортеж (1, 2, 3, 'hello')<p><strong>Распаковка кортежа.</strong>Элементы кортежа извлекаются в переменные:</p>
45
my_tuple = 1, 2, 3, 'hello' # В переменной my_tuple теперь находится кортеж (1, 2, 3, 'hello')<p><strong>Распаковка кортежа.</strong>Элементы кортежа извлекаются в переменные:</p>
46
a, b, c, d = my_tuple # Теперь переменные a, b, c, d содержат значения из кортежа # a = 1, b = 2, c = 3, d = 'hello'<p><strong>Обмен значениями между переменными.</strong>С помощью упаковки и распаковки кортежей можно обменять значения переменных между собой без использования временной переменной.</p>
46
a, b, c, d = my_tuple # Теперь переменные a, b, c, d содержат значения из кортежа # a = 1, b = 2, c = 3, d = 'hello'<p><strong>Обмен значениями между переменными.</strong>С помощью упаковки и распаковки кортежей можно обменять значения переменных между собой без использования временной переменной.</p>
47
<p>Посмотрим пример кода:</p>
47
<p>Посмотрим пример кода:</p>
48
x = 5 y = 10 # Обмен значениями с использованием кортежа, упаковки и распаковки x, y = y, x # Теперь переменные x и y содержат новые значения print('x =', x) # Вывод: x = 10 print('y =', y) # Вывод: y = 10<p>Операция упаковки (y, x) сначала создаёт кортеж из двух значений (10, 5), затем операция распаковки (x, y) распаковывает кортеж и присваивает значения переменным x и y соответственно. Теперь переменная x содержит 10, а y содержит 5.</p>
48
x = 5 y = 10 # Обмен значениями с использованием кортежа, упаковки и распаковки x, y = y, x # Теперь переменные x и y содержат новые значения print('x =', x) # Вывод: x = 10 print('y =', y) # Вывод: y = 10<p>Операция упаковки (y, x) сначала создаёт кортеж из двух значений (10, 5), затем операция распаковки (x, y) распаковывает кортеж и присваивает значения переменным x и y соответственно. Теперь переменная x содержит 10, а y содержит 5.</p>
49
<p>Кортежи в Python сравниваются покомпонентно начиная с первого элемента до первого неравенства или до конца переменной. Если кортежи имеют одинаковую длину и все соответствующие элементы равны, то они считаются равными:</p>
49
<p>Кортежи в Python сравниваются покомпонентно начиная с первого элемента до первого неравенства или до конца переменной. Если кортежи имеют одинаковую длину и все соответствующие элементы равны, то они считаются равными:</p>
50
# Пример 1: кортежи с числовыми значениями tuple1 = (1, 2, 3) tuple2 = (1, 2, 3) print(tuple1 == tuple2) # True, так как все элементы равны # Пример 2: кортежи с разными значениями tuple3 = (4, 5, 6) print(tuple1 == tuple3) # False, так как первые элементы различаются # Пример 3: Сравнение кортежей разной длины tuple4 = (1, 2, 3, 4) print(tuple1 == tuple4) # False, так как длина кортежей разная<p>Для сравнения используются стандартные операторы ==, !=, >, <, >=, <=.</p>
50
# Пример 1: кортежи с числовыми значениями tuple1 = (1, 2, 3) tuple2 = (1, 2, 3) print(tuple1 == tuple2) # True, так как все элементы равны # Пример 2: кортежи с разными значениями tuple3 = (4, 5, 6) print(tuple1 == tuple3) # False, так как первые элементы различаются # Пример 3: Сравнение кортежей разной длины tuple4 = (1, 2, 3, 4) print(tuple1 == tuple4) # False, так как длина кортежей разная<p>Для сравнения используются стандартные операторы ==, !=, >, <, >=, <=.</p>
51
<p>При сравнении используются правила:</p>
51
<p>При сравнении используются правила:</p>
52
<ul><li>когда сравниваются числовые элементы, большим считается тот кортеж, у которого первый отличающийся элемент больше;</li>
52
<ul><li>когда сравниваются числовые элементы, большим считается тот кортеж, у которого первый отличающийся элемент больше;</li>
53
<li>когда сравниваются строки, сравнение происходит по порядку в алфавите;</li>
53
<li>когда сравниваются строки, сравнение происходит по порядку в алфавите;</li>
54
<li>элементы различных типов сравнивать нельзя - получим ошибку TypeError;</li>
54
<li>элементы различных типов сравнивать нельзя - получим ошибку TypeError;</li>
55
<li>если длины кортежей различны, то кортеж с меньшей длиной считается наименьшим.</li>
55
<li>если длины кортежей различны, то кортеж с меньшей длиной считается наименьшим.</li>
56
</ul><p>Пример:</p>
56
</ul><p>Пример:</p>
57
tuple1 = (1, 2, 3) tuple2 = (1, 2, 4) print(tuple1 < tuple2) # True, так как tuple1 меньше tuple2 - (tuple1[3] < tuple2[3]) tuple3 = ('apple', 'banana') tuple4 = ('apple', 'orange') print(tuple3 < tuple4) # True, так как tuple3 "меньше" tuple4 по порядковому номеру первой отличающейся буквы tuple7 = (1, 2, 3) tuple8 = (1, 2, 3, 4) print(tuple7 < tuple8) # True, так как tuple7 "меньше" tuple8 (кортеж меньшей длины меньше) tuple5 = (1, 2, 3) tuple6 = ('apple', 'banana', 'orange') print(tuple5 < tuple6) # Ошибка TypeError: '<' not supported between instances of 'int' and 'str' - нельзя сравнивать числа и строки<p>Чтобы проверить, принадлежит ли элемент кортежу, используется оператор in. Если элемент присутствует в кортеже, оператор возвращает True, в противном случае - False.</p>
57
tuple1 = (1, 2, 3) tuple2 = (1, 2, 4) print(tuple1 < tuple2) # True, так как tuple1 меньше tuple2 - (tuple1[3] < tuple2[3]) tuple3 = ('apple', 'banana') tuple4 = ('apple', 'orange') print(tuple3 < tuple4) # True, так как tuple3 "меньше" tuple4 по порядковому номеру первой отличающейся буквы tuple7 = (1, 2, 3) tuple8 = (1, 2, 3, 4) print(tuple7 < tuple8) # True, так как tuple7 "меньше" tuple8 (кортеж меньшей длины меньше) tuple5 = (1, 2, 3) tuple6 = ('apple', 'banana', 'orange') print(tuple5 < tuple6) # Ошибка TypeError: '<' not supported between instances of 'int' and 'str' - нельзя сравнивать числа и строки<p>Чтобы проверить, принадлежит ли элемент кортежу, используется оператор in. Если элемент присутствует в кортеже, оператор возвращает True, в противном случае - False.</p>
58
my_tuple = (1, 2, 3, 4, 5) # Проверка, содержится ли число 3 в кортеже print(3 in my_tuple) # Вывод: True<p>Для перебора элементов кортежа в Python используется цикл for или while:</p>
58
my_tuple = (1, 2, 3, 4, 5) # Проверка, содержится ли число 3 в кортеже print(3 in my_tuple) # Вывод: True<p>Для перебора элементов кортежа в Python используется цикл for или while:</p>
59
my_tuple = (1, 2, 3, 4, 5) # Перебор элементов кортежа с помощью цикла for for element in my_tuple: print(element) # Вывод: 1 2 3 4 5 # Перебор элементов кортежа с помощью цикла while i = 0 while i < len(my_tuple): print(my_tuple[i]) i += 1<p>Код выводит каждый элемент кортежа my_tuple на новой строке.</p>
59
my_tuple = (1, 2, 3, 4, 5) # Перебор элементов кортежа с помощью цикла for for element in my_tuple: print(element) # Вывод: 1 2 3 4 5 # Перебор элементов кортежа с помощью цикла while i = 0 while i < len(my_tuple): print(my_tuple[i]) i += 1<p>Код выводит каждый элемент кортежа my_tuple на новой строке.</p>
60
<p>Удалять из кортежа элементы нельзя, но можно удалить его полностью с помощью ключевого слова del:</p>
60
<p>Удалять из кортежа элементы нельзя, но можно удалить его полностью с помощью ключевого слова del:</p>
61
my_tuple = (1, 2, 3, 4, 5) # Удаление кортежа del my_tuple # Попробуем распечатать удалённый кортеж print(my_tuple) # Ошибка: NameError: name 'my_tuple' is not defined<p>В этом примере del my_tuple удаляет ссылку на кортеж из памяти. После этого переменной my_tuple больше не существует и попытка обратиться к ней вызовет ошибку NameError.</p>
61
my_tuple = (1, 2, 3, 4, 5) # Удаление кортежа del my_tuple # Попробуем распечатать удалённый кортеж print(my_tuple) # Ошибка: NameError: name 'my_tuple' is not defined<p>В этом примере del my_tuple удаляет ссылку на кортеж из памяти. После этого переменной my_tuple больше не существует и попытка обратиться к ней вызовет ошибку NameError.</p>
62
<p>В Python для кортежей доступны операции конкатенации (сложения) и повторения (умножения). Эти операции могут использоваться при создании новых кортежей на основе существующих.</p>
62
<p>В Python для кортежей доступны операции конкатенации (сложения) и повторения (умножения). Эти операции могут использоваться при создании новых кортежей на основе существующих.</p>
63
<p><strong>Конкатенация.</strong>Это объединение двух кортежей в один новый кортеж с помощью оператора +.</p>
63
<p><strong>Конкатенация.</strong>Это объединение двух кортежей в один новый кортеж с помощью оператора +.</p>
64
<p>Напишем код:</p>
64
<p>Напишем код:</p>
65
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) concatenated_tuple = tuple1 + tuple2 print('Конкатенация кортежей:', concatenated_tuple)<p>Результат:</p>
65
tuple1 = (1, 2, 3) tuple2 = (4, 5, 6) concatenated_tuple = tuple1 + tuple2 print('Конкатенация кортежей:', concatenated_tuple)<p>Результат:</p>
66
Конкатенация кортежей: (1, 2, 3, 4, 5, 6)<p><strong>Повторение.</strong>Этот способ создания кортежа напоминает арифметическое умножение: справа от исходного кортежа нужно добавить оператор * и указать, сколько раз он повторится.</p>
66
Конкатенация кортежей: (1, 2, 3, 4, 5, 6)<p><strong>Повторение.</strong>Этот способ создания кортежа напоминает арифметическое умножение: справа от исходного кортежа нужно добавить оператор * и указать, сколько раз он повторится.</p>
67
original_tuple = (1, 2, 3) repeated_tuple = original_tuple * 3 print('Повторение кортежа:', repeated_tuple)<p>Результат выполнения кода:</p>
67
original_tuple = (1, 2, 3) repeated_tuple = original_tuple * 3 print('Повторение кортежа:', repeated_tuple)<p>Результат выполнения кода:</p>
68
Повторение кортежа: (1, 2, 3, 1, 2, 3, 1, 2, 3)<p>При выполнении операций конкатенации и повторения создаются новые кортежи, а исходные остаются неизменными.</p>
68
Повторение кортежа: (1, 2, 3, 1, 2, 3, 1, 2, 3)<p>При выполнении операций конкатенации и повторения создаются новые кортежи, а исходные остаются неизменными.</p>
69
<p>В Python есть встроенные функции, которые облегчают работу с кортежами.</p>
69
<p>В Python есть встроенные функции, которые облегчают работу с кортежами.</p>
70
<p>Во многих статьях можно встретить формулировку "методы кортежей", но это не совсем корректно. Метод - это понятие из объектно-ориентированного программирования, обозначающее функцию или процедуру, принадлежащую к какому-либо классу или объекту. Ниже мы говорим про функции, которые принимают и возвращают значения, без привязки к классам или объектам.</p>
70
<p>Во многих статьях можно встретить формулировку "методы кортежей", но это не совсем корректно. Метод - это понятие из объектно-ориентированного программирования, обозначающее функцию или процедуру, принадлежащую к какому-либо классу или объекту. Ниже мы говорим про функции, которые принимают и возвращают значения, без привязки к классам или объектам.</p>
71
<p><strong>Длину кортежа</strong>можно получить функцией len(), которая возвращает количество элементов в кортеже:</p>
71
<p><strong>Длину кортежа</strong>можно получить функцией len(), которая возвращает количество элементов в кортеже:</p>
72
my_tuple = (1, 2, 3, 4, 5) length_of_tuple = len(my_tuple) print('Длина кортежа:', length_of_tuple)<p>Результат:</p>
72
my_tuple = (1, 2, 3, 4, 5) length_of_tuple = len(my_tuple) print('Длина кортежа:', length_of_tuple)<p>Результат:</p>
73
Длина кортежа: 5<p><strong>Сумма элементов</strong>рассчитывается легко запоминающейся функцией sum():</p>
73
Длина кортежа: 5<p><strong>Сумма элементов</strong>рассчитывается легко запоминающейся функцией sum():</p>
74
my_tuple = (1, 2, 3, 4, 5) sum_of_elements = sum(my_tuple) print('Сумма элементов кортежа:', sum_of_elements)<p>Результат:</p>
74
my_tuple = (1, 2, 3, 4, 5) sum_of_elements = sum(my_tuple) print('Сумма элементов кортежа:', sum_of_elements)<p>Результат:</p>
75
Сумма элементов кортежа: 15<p>Если кортеж пуст, len() и sum() возвращают 0.</p>
75
Сумма элементов кортежа: 15<p>Если кортеж пуст, len() и sum() возвращают 0.</p>
76
<p><strong>Минимальный и максимальный элементы</strong>кортежа можно получить с помощью функций min() и max():</p>
76
<p><strong>Минимальный и максимальный элементы</strong>кортежа можно получить с помощью функций min() и max():</p>
77
my_tuple = (1, 2, 3, 4, 5) min_element = min(my_tuple) max_element = max(my_tuple) print('Минимальный элемент кортежа:', min_element) print('Максимальный элемент кортежа:', max_element)<p>Результат выполнения:</p>
77
my_tuple = (1, 2, 3, 4, 5) min_element = min(my_tuple) max_element = max(my_tuple) print('Минимальный элемент кортежа:', min_element) print('Максимальный элемент кортежа:', max_element)<p>Результат выполнения:</p>
78
Минимальный элемент кортежа: 1 Максимальный элемент кортежа: 5<p>Если кортеж пуст, то использование функций min() и max() вызовет ошибку ValueError.</p>
78
Минимальный элемент кортежа: 1 Максимальный элемент кортежа: 5<p>Если кортеж пуст, то использование функций min() и max() вызовет ошибку ValueError.</p>
79
<p>Элементы можно отсортировать по возрастанию или по убыванию. Так как кортежи относятся к неизменяемому типу данных, то кортеж с упорядоченными элементами нужно будет сохранить в новой переменной.</p>
79
<p>Элементы можно отсортировать по возрастанию или по убыванию. Так как кортежи относятся к неизменяемому типу данных, то кортеж с упорядоченными элементами нужно будет сохранить в новой переменной.</p>
80
<p>Для сортировки используется функция sorted():</p>
80
<p>Для сортировки используется функция sorted():</p>
81
# Исходный кортеж original_tuple = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5) # Создаём новый кортеж с отсортированными элементами sorted_tuple = tuple(sorted(original_tuple)) # Выводим результат print('Исходный кортеж:', original_tuple) print('Отсортированный кортеж:', sorted_tuple)<p>Результат:</p>
81
# Исходный кортеж original_tuple = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5) # Создаём новый кортеж с отсортированными элементами sorted_tuple = tuple(sorted(original_tuple)) # Выводим результат print('Исходный кортеж:', original_tuple) print('Отсортированный кортеж:', sorted_tuple)<p>Результат:</p>
82
Исходный кортеж: (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5) Отсортированный кортеж: (1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9)<p>Остановимся на коде:</p>
82
Исходный кортеж: (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5) Отсортированный кортеж: (1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9)<p>Остановимся на коде:</p>
83
<ul><li>sorted(original_tuple) создаёт новый список, содержащий отсортированные элементы из original_tuple;</li>
83
<ul><li>sorted(original_tuple) создаёт новый список, содержащий отсортированные элементы из original_tuple;</li>
84
<li>tuple(...) создаёт новый кортеж из отсортированного списка.</li>
84
<li>tuple(...) создаёт новый кортеж из отсортированного списка.</li>
85
</ul><p>Если нужна сортировка в обратном порядке, в функции sorted() используется параметр reverse=True:</p>
85
</ul><p>Если нужна сортировка в обратном порядке, в функции sorted() используется параметр reverse=True:</p>
86
original_tuple = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5) sorted_tuple_reverse = tuple(sorted(original_tuple, reverse=True)) print('Отсортированный в обратном порядке кортеж:', sorted_tuple_reverse)<p>Получаем:</p>
86
original_tuple = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5) sorted_tuple_reverse = tuple(sorted(original_tuple, reverse=True)) print('Отсортированный в обратном порядке кортеж:', sorted_tuple_reverse)<p>Получаем:</p>
87
Отсортированный в обратном порядке кортеж: (9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1)<p>Срезы используются для извлечения из кортежей подмножества элементов. Для этого необходимо указать начальный и конечный индекс, а также шаг среза.</p>
87
Отсортированный в обратном порядке кортеж: (9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1)<p>Срезы используются для извлечения из кортежей подмножества элементов. Для этого необходимо указать начальный и конечный индекс, а также шаг среза.</p>
88
<p>Для определения начала и конца среза можно использовать положительные и отрицательные индексы:</p>
88
<p>Для определения начала и конца среза можно использовать положительные и отрицательные индексы:</p>
89
<ul><li>левый индекс указывает на элемент, с которого начинается срез;</li>
89
<ul><li>левый индекс указывает на элемент, с которого начинается срез;</li>
90
<li>правый индекс указывает на элемент, которым заканчивается срез, этот элемент в срез не включается.</li>
90
<li>правый индекс указывает на элемент, которым заканчивается срез, этот элемент в срез не включается.</li>
91
</ul><p>Получим срез, указав положительные индексы:</p>
91
</ul><p>Получим срез, указав положительные индексы:</p>
92
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # Получение среза с элементами от 2 до 6 (не включая 6) subset_positive = my_tuple[2:6] print('Срез с положительными индексами:', subset_positive)<p>Результат:</p>
92
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # Получение среза с элементами от 2 до 6 (не включая 6) subset_positive = my_tuple[2:6] print('Срез с положительными индексами:', subset_positive)<p>Результат:</p>
93
Срез с положительными индексами: (2, 3, 4, 5)<p>Срез с отрицательными индексами:</p>
93
Срез с положительными индексами: (2, 3, 4, 5)<p>Срез с отрицательными индексами:</p>
94
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # Срез с отрицательными индексами: начинаем с элемента с индексом -4 и заканчиваем элементом с индексом -1 (не включительно) negative_slice = my_tuple[-4:-1] print('Срез с отрицательными индексами:', negative_slice)<p>Результат:</p>
94
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # Срез с отрицательными индексами: начинаем с элемента с индексом -4 и заканчиваем элементом с индексом -1 (не включительно) negative_slice = my_tuple[-4:-1] print('Срез с отрицательными индексами:', negative_slice)<p>Результат:</p>
95
Срез с отрицательными индексами: (6, 7, 8)<p>Если индексы пропущены, то срез будет включать все элементы от начала кортежа до заданного конца среза или от заданного начала среза до конца кортежа:</p>
95
Срез с отрицательными индексами: (6, 7, 8)<p>Если индексы пропущены, то срез будет включать все элементы от начала кортежа до заданного конца среза или от заданного начала среза до конца кортежа:</p>
96
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # Все элементы от начала кортежа до 7-го элемента (не включительно) slice_from_start = my_tuple[:7] # Все элементы от 3-го до конца кортежа slice_to_end = my_tuple[3:] print('Срез от начала до 7-го элемента:', slice_from_start) print('Срез от 3-го до конца:', slice_to_end)<p>Результат:</p>
96
my_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) # Все элементы от начала кортежа до 7-го элемента (не включительно) slice_from_start = my_tuple[:7] # Все элементы от 3-го до конца кортежа slice_to_end = my_tuple[3:] print('Срез от начала до 7-го элемента:', slice_from_start) print('Срез от 3-го до конца:', slice_to_end)<p>Результат:</p>
97
Срез от начала до 7-го элемента: (0, 1, 2, 3, 4, 5, 6) Срез от 3-го до конца: (3, 4, 5, 6, 7, 8, 9)<p>В Python можно преобразовывать кортежи в другие типы данных: списки, строки, множества или словари.</p>
97
Срез от начала до 7-го элемента: (0, 1, 2, 3, 4, 5, 6) Срез от 3-го до конца: (3, 4, 5, 6, 7, 8, 9)<p>В Python можно преобразовывать кортежи в другие типы данных: списки, строки, множества или словари.</p>
98
<p>Так можно превратить<strong>кортеж в список</strong>:</p>
98
<p>Так можно превратить<strong>кортеж в список</strong>:</p>
99
my_tuple = (1, 2, 3, 4, 5) # Преобразование кортежа в список my_list = list(my_tuple) print('Кортеж:', my_tuple) print('Список:', my_list)<p>Результат:</p>
99
my_tuple = (1, 2, 3, 4, 5) # Преобразование кортежа в список my_list = list(my_tuple) print('Кортеж:', my_tuple) print('Список:', my_list)<p>Результат:</p>
100
Кортеж: (1, 2, 3, 4, 5) Список: [1, 2, 3, 4, 5]<p>А так можно преобразовать<strong>кортеж в строку</strong>:</p>
100
Кортеж: (1, 2, 3, 4, 5) Список: [1, 2, 3, 4, 5]<p>А так можно преобразовать<strong>кортеж в строку</strong>:</p>
101
my_tuple = (1, 2, 3) # Преобразование кортежа в строку my_string = ''.join(map(str, my_tuple)) print('Кортеж:' my_tuple) print('Строка:', my_string)<p>Здесь использовали встроенную функцию str.join. Работает она просто - переводит каждый элемент кортежа в строковый тип, а затем объединяет их в одну строку.</p>
101
my_tuple = (1, 2, 3) # Преобразование кортежа в строку my_string = ''.join(map(str, my_tuple)) print('Кортеж:' my_tuple) print('Строка:', my_string)<p>Здесь использовали встроенную функцию str.join. Работает она просто - переводит каждый элемент кортежа в строковый тип, а затем объединяет их в одну строку.</p>
102
<p>Результат:</p>
102
<p>Результат:</p>
103
Кортеж: (1, 2, 3) Строка: 123<p>Преобразовать<strong>кортеж во множество</strong>:</p>
103
Кортеж: (1, 2, 3) Строка: 123<p>Преобразовать<strong>кортеж во множество</strong>:</p>
104
my_tuple = (1, 2, 3, 2, 4) # Преобразование кортежа во множество, при котором удаляются повторяющиеся элементы my_set = set(my_tuple) print('Кортеж:', my_tuple) print('Множество:', my_set)<p>Результат:</p>
104
my_tuple = (1, 2, 3, 2, 4) # Преобразование кортежа во множество, при котором удаляются повторяющиеся элементы my_set = set(my_tuple) print('Кортеж:', my_tuple) print('Множество:', my_set)<p>Результат:</p>
105
Кортеж: (1, 2, 3, 2, 4) Множество: {1, 2, 3, 4}<p>Множества - это неупорядоченные коллекции, которые состоят из уникальных элементов. Если преобразовать кортеж во множество, то все дубликаты в нём удалятся.</p>
105
Кортеж: (1, 2, 3, 2, 4) Множество: {1, 2, 3, 4}<p>Множества - это неупорядоченные коллекции, которые состоят из уникальных элементов. Если преобразовать кортеж во множество, то все дубликаты в нём удалятся.</p>
106
<p><strong>Кортеж в словарь (пары "ключ - значение"):</strong></p>
106
<p><strong>Кортеж в словарь (пары "ключ - значение"):</strong></p>
107
my_tuple = (('a', 1), ('b', 2), ('c', 3)) # Преобразование кортежа в словарь my_dict = dict(my_tuple) print('Кортеж:', my_tuple) print('Словарь:', my_dict)<p>Результат:</p>
107
my_tuple = (('a', 1), ('b', 2), ('c', 3)) # Преобразование кортежа в словарь my_dict = dict(my_tuple) print('Кортеж:', my_tuple) print('Словарь:', my_dict)<p>Результат:</p>
108
Кортеж: (('a', 1), ('b', 2), ('c', 3)) Словарь: {'a': 1, 'b': 2, 'c': 3}<p>Хотя кортежи относятся к неизменяемым элементам, есть трюк, который позволяет их изменять. Для этого нужно перевести кортеж в список, сделать необходимые преобразования, а затем превратить полученный список в кортеж:</p>
108
Кортеж: (('a', 1), ('b', 2), ('c', 3)) Словарь: {'a': 1, 'b': 2, 'c': 3}<p>Хотя кортежи относятся к неизменяемым элементам, есть трюк, который позволяет их изменять. Для этого нужно перевести кортеж в список, сделать необходимые преобразования, а затем превратить полученный список в кортеж:</p>
109
my_tuple = (1, 2, 3, 4, 5) # Преобразование кортежа в список my_list = list(my_tuple) # Изменение значения в списке my_list[2] = 10 # Преобразование списка обратно в кортеж updated_tuple = tuple(my_list) print('Исходный кортеж:', my_tuple) print('Обновлённый кортеж:', updated_tuple)<p>Результат:</p>
109
my_tuple = (1, 2, 3, 4, 5) # Преобразование кортежа в список my_list = list(my_tuple) # Изменение значения в списке my_list[2] = 10 # Преобразование списка обратно в кортеж updated_tuple = tuple(my_list) print('Исходный кортеж:', my_tuple) print('Обновлённый кортеж:', updated_tuple)<p>Результат:</p>
110
Исходный кортеж: (1, 2, 3, 4, 5) Обновлённый кортеж: (1, 2, 10, 4, 5)<p>Другой подоход - создать новый кортеж с изменёнными значениями:</p>
110
Исходный кортеж: (1, 2, 3, 4, 5) Обновлённый кортеж: (1, 2, 10, 4, 5)<p>Другой подоход - создать новый кортеж с изменёнными значениями:</p>
111
my_tuple = (1, 2, 3, 4, 5) # Создание нового кортежа с изменённым значением updated_tuple = my_tuple[:2] + (10,) + my_tuple[3:] print('Исходный кортеж:', my_tuple) print('Обновлённый кортеж:', updated_tuple)<p>Результат:</p>
111
my_tuple = (1, 2, 3, 4, 5) # Создание нового кортежа с изменённым значением updated_tuple = my_tuple[:2] + (10,) + my_tuple[3:] print('Исходный кортеж:', my_tuple) print('Обновлённый кортеж:', updated_tuple)<p>Результат:</p>
112
Исходный кортеж: (1, 2, 3, 4, 5) Обновлённый кортеж: (1, 2, 10, 4, 5)<p>В этом примере создаём новый кортеж updated_tuple, включая все элементы кортежа my_tuple с начала до второго, добавляем к ним новое значение 10, а затем добавляем все элементы my_tuple начиная с четвёртого и до конца.</p>
112
Исходный кортеж: (1, 2, 3, 4, 5) Обновлённый кортеж: (1, 2, 10, 4, 5)<p>В этом примере создаём новый кортеж updated_tuple, включая все элементы кортежа my_tuple с начала до второго, добавляем к ним новое значение 10, а затем добавляем все элементы my_tuple начиная с четвёртого и до конца.</p>
113
<p>Мы рассмотрели только базовые понятия и операции с кортежами. Если вы хотите погрузиться в работу с ними глубже, то советуем<a>перейти к документации</a>. И обязательно пишите код из примеров в своём редакторе кода или IDE - это поможет закрепить теорию.</p>
113
<p>Мы рассмотрели только базовые понятия и операции с кортежами. Если вы хотите погрузиться в работу с ними глубже, то советуем<a>перейти к документации</a>. И обязательно пишите код из примеров в своём редакторе кода или IDE - это поможет закрепить теорию.</p>
114
<p>Python для всех</p>
114
<p>Python для всех</p>
115
<p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
115
<p>Вы освоите Python на практике и создадите проекты для портфолио - телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер - руководитель отдела разработки в "Сбере".</p>
116
<p><a>Пройти бесплатно</a></p>
116
<p><a>Пройти бесплатно</a></p>
117
<a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>
117
<a><b>Бесплатный курс по разработке на Python ➞</b>Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер - руководитель отдела разработки в "Сбере". Пройти курс</a>