undo
search menu close

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

📅 3 мая 2025 г. 20:54

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

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

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

Создание списка

Существует несколько способов создания списков в Python.

1. Список создаёт перечисление элементов через запятую внутри квадратных скобок []:

emperors = ["Александр I", "Пётр I", "Павел I"]

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

emperors = ["Александр I", "Пётр I", "Павел I", ["Николай I", "Николай II"]]

2. В список можно преобразовать другую коллекцию с помощью функции list().

Функция list(iterable)
Описание Создаёт список из всех объектов коллекции iterable
Параметры iterable – коллекция для преобразования в список
Возвращаемое значение Список

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

famous_poem = "Одиссея"
print(list(famous_poem)) 
# Вывод: ['О', 'д', 'и', 'с', 'с', 'е', 'я']

Списки, созданные из кортежа и множества, сохранят свои элементы:

famous_places = ("Эрмитаж", "Петропавловская крепость", "Летний сад")
print(list(famous_places)) 
# Вывод: ['Эрмитаж', 'Петропавловская крепость', 'Летний сад']

famous_sculptures = {"Венера Милосская", "статуя Давида"}
print(list(famous_sculptures)) 
# Вывод: ['статуя Давида', 'Венера Милосская']

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

При создании списка из словаря по умолчанию используются его ключи:

famous_arts = {"Мона Лиза": 1506, "Рождение Венеры": 1486}
print(list(famous_arts))
# Вывод: ["Мона Лиза", "Рождение Венеры"]

Для создания списка из значений словаря необходимо использовать метод dict.values():

print(list(famous_arts.values()))
# Вывод: [1506, 1486]

Создание пустого списка

Функция list() без аргументов или пустые квадратные скобки [] создают пустой список:

emperors_achievements = list()
emperors_achievements = []

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

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

1. Кортеж создаёт перечисление элементов через запятую внутри круглых скобок () или без круглых скобок:

empress1 = ("Мария Испанская", "Констанция Сицилийская", "Елизавета Померанская")
empress2 = "Анна I Иоанновна", "Мария Терезия"

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

princess = ("Анна Византийская",)

Без запятой Python интерпретирует выражение как обычное значение того же типа:

princess = ("Анна Византийская")
print(type(princess))
# Вывод: <class "str">

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

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

Функция tuple()
Описание Создаёт кортеж из всех объектов коллекции iterable
Параметры iterable – коллекция для преобразования в список
Возвращаемое значение Кортеж

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

house = "Палеологи"
print(tuple(house)) 
# Вывод: ("П", "а", "л", "е", "о", "л", "о", "г", "и")

children = ["Анна Палеологина", "Мануил Палеолог"]
print(tuple(children)) 
# Вывод: ("Анна Палеологина", "Мануил Палеолог")

languages = {"Греческий язык", "Латинский язык", "Итальяеский язык"}
print(tuple(languages)) 
# Вывод: ("Греческий язык", "Итальяеский язык", "Латинский язык")

Множественное присваивание

Также мы уже создавали кортежи, когда рассматривали операцию множественного присваивания:

year, age = 1234, 16

На самом деле здесь справа создаётся кортеж (1234, 16), который затем распаковывается в переменные year и age.

Создание пустого кортежа

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

emperors = ["Александр I", "Пётр I", "Павел I"]
achievements = list()
achievements = []
empress1 = ("Мария Испанская", "Констанция Сицилийская", "Елизавета Померанская")
empress2 = "Анна I Иоанновна", "Мария Терезия"
achievements = tuple()
Одна запятая в круглых скобках (,) не создаст пустой кортеж, а только приведёт к синтаксической ошибке.

Сложение и умножение списков и кортежей

Списки и кортежи поддерживают операции сложения (конкатенации) и умножения (повторения), аналогичные строкам.

Сложение списков и кортежей

Конкатенация списков или кортежей создаёт новый список или кортеж, состоящий из всех элементов первой и второй коллекции:

female_dragons = ["Арракс", "Вермакс", "Вермитор"]
male_dragons = ["Тессарион", "Среброкрылая"]
dragons = female_dragons + male_dragons
print(dragons)
# Вывод: ["Арракс", "Вермакс", "Вермитор", "Тессарион", "Среброкрылая"]

infantry = ("Стрельцы", "Копейщики", "Гренадеры")
cavalry = ("Рыцари", "Гусары")
warriors = infantry + cavalry
print(warriors)
# Вывод: ("Стрельцы", "Копейщики", "Гренадеры", "Рыцари", "Гусары")

Также допускается использование расширенного оператора сложения с присваиванием +=, который добавляет элементы второй коллекции в конец первой:

female_dragons += male_dragons
print(female_dragons)
# Вывод: ["Арракс", "Вермакс", "Вермитор", "Тессарион", "Среброкрылая"]

infantry += cavalry
print(infantry)
# Вывод: ("Стрельцы", "Копейщики", "Гренадеры", "Рыцари", "Гусары")

Для списков происходит изменение первого списка, а для кортежей создается новый объект.

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

Умножение списка или кортежа на целое число n создаёт новую коллекцию, в которой исходная последовательность повторяется n раз:

battle_cries = ["За родину!", "За Сталина!"]
more_battle_cries = battle_cries * 3
print(more_battle_cries)
# Вывод: ["За родину!", "За Сталина!", "За родину!", "За Сталина!", "За родину!", "За Сталина!"]

polite_phrases = ("Хорошего дня!", "Хороших выходных!")
more_polite_phrases = polite_phrases * 3
print(more_polite_phrases)
# Вывод: ("Хорошего дня!", "Хороших выходных!", "Хорошего дня!", "Хороших выходных!", "Хорошего дня!", "Хороших выходных!")

Если не нужно сохранять исходную коллекцию, то умножение списка или кортежа на число также поддерживает оператор умножения с присваиванием *=:

battle_cries *= 3
print(battle_cries)
# Вывод: ["За родину!", "За Сталина!", "За родину!", "За Сталина!", "За родину!", "За Сталина!"]

polite_phrases *= 3
print(polite_phrases)
# Вывод: ("Хорошего дня!", "Хороших выходных!", "Хорошего дня!", "Хороших выходных!", "Хорошего дня!", "Хороших выходных!")

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

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

Методы list.index(item, start=0, end=None)
tuple.index(item, start=0, end=None)
Описание Возвращает начальный индекс первого вхождения элемента item в список list или кортеж tuple
Параметры item – искомый элемент

Необязательные параметры:
start – индекс начала среза, в котором ищется элемент, по умолчанию start=0
end – индекс конца среза, в котором ищется элемент, по умолчанию end=None
Возвращаемое значение Целое число

Если не указаны параметры среза [start:end], то поиск ведётся во всей коллекции:

grades = [4, 4, 5, 5, 4, 5]
print(grades.index(4))
# Вывод: 0 

Но также мы можем ограничить область поиска:

schedule = ("Русский язык", "Математика", "Математика", "Информатика", "Технология")
print(schedule.index("Математика", 2, 4))
# Вывод: 2 

Здесь первый найденный элемент имеет индекс 2, так как такой же элемент с индексом 1 исключен из поиска с помощью среза.

Как и в случае строк, если искомый элемент отсутствует в коллекции, метод вызывает исключение ValueError:

schedule = ["Русский язык", "Математика", "Математика", "Информатика", "Технология"]
print(schedule.index("Литература"))
# Ошибка: ValueError: tuple.index(x): x not in list

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

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

Метод list.count(item, start=0, end=None)
tuple.count(item, start=0, end=None)
Описание Возвращает количество вхождений элемента item в список list или кортеж tuple
Параметры item – подсчитываемый элемент

Необязательные параметры:
start – индекс начала среза, в котором ищется элемент, по умолчанию start=0
end – индекс конца среза, в котором ищется элемент, по умолчанию end=None
Возвращаемое значение Целое число

Как и в случае использования метода index() мы можем производить подсчёт элемента во всей коллекции или ограничить область подсчёта с помощью параметров среза start и end:

breakfast = ["Чай", "Печенье", "Печенье", "Печенье", "Варенье"]
print(breakfast.count("Печенье"))
# Вывод: 3

spoons = ("Столовая ложка", "Чайная ложка", "Столовая ложка", "Чайная ложка")
print(spoons.count("Чайная ложка"))
# Вывод: 2
Задания для самопроверки

1. В чем заключается основное различие между списками и кортежами в Python?

 
Ответ

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

Пример входных данных Пример выходных данных
Python ['P', 'y', 't', 'h', 'o', 'n']
JavaScript ['J', 'a', 'v', 'a', 'S', 'c', 'r', 'i', 'p', 't']
PHP ['P', 'H', 'P']
 
Ответ

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

 
Ответ

4. Напишите программу, которая создаёт список ["Раз", "Два", "Раз", "Два", "Раз", "Два"] с помощью операции умножения и выводит его на экран.

 
Ответ

5. Напишите программу, которая выводит на экран индекс первого вхождения числа 5 в список [1, 3, 5, 7, 5].

 
Ответ

6. Напишите программу, которая подсчитывает, сколько раз строка "Физика" встречается в кортеже ("Физика", "Физика", "Математика", "Русский язык", "История") и выводит результат на экран.

 
Ответ
arrow_back_ios Назад
Дальше arrow_forward_ios

 💬 0 комментариев
person
email