Списки и кортежи
Встроенные типы данных в Python
- изменяемые (list, dict, set)
- неизменяемые (tuple, float, int, string, bool)
>>> id('Hello')
>>> id('Hello')
>>> id('world')
Списки
Список (list) – упорядоченная изменяемая коллекция элементов различных типов. Элементы в списке могут быть различных типов и менять состав элементов списка можно когда угодно и как угодно.
Создание списка
Чтобы использовать списки, их нужно сначала создать. Создать список можно несколькими способами. Например, можно обработать любой итерируемый (по которому можно пробежаться, используя цикл for
) объект (например, строку) встроенной функцией list()
:
list('Goodbye Universe')
- Что тут получается?
Или же использовать встроенный в питон литерал, с первого взгляда похожий на оператор []:
guests = ['Вася', 'Татуся', 'Пётр Яковлевич', 'мама'] # список строк
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9] # список чисел
empty_list = [] # а этот список абсолютно пуст
mixed_list = ['Вася', 45, True] # в одном списке могут храниться элементы разных типов
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # список списков
Как видно из примеров, список может содержать любое количество элементов любого типа или не содержать ничего.
Индексы
- ИНДЕКСАЦИЯ С НУЛЯ
К элементам списка, как и к символам в строке можно обращаться по их индексам:
list_of_wishes = ['iPhone', 'MacBook', 'Свитшот']
print(list_of_wishes[1])
Если хочется получить самый последний элемент списка, то не придется считать сколько там всего элементов, можно использовать индекс -1
. -1
– это шорткат для len(list) - 1
.
print(list_of_wishes[-1])
print(list_of_wishes[-2])
Срезы
Если нужно выделить из списка/строки не один элемент, а сразу несколько, то нужно использовать срезы.
list_of_chars = list('студент')
print(list_of_chars[1:]) # Взять все символы имени, кроме первого
Общий синтаксис срезов: list[START:END:STEP]
- Напишите программу, которая будет проверять является ли введённое пользователем слово палиндромом.
Вставка элементов в список
Самая частая операция после [] (получение элемента списка по индексу) это операция вставки чего-либо в список. Называется она .append()
.
Только .append()
это не отдельная функция, как например len()
. Это так называемый метод списка. Смотрим как это работает:
list_of_wishes = [] # Список моих желаний, когда меня спрашивают, что я хочу на НГ
list_of_wishes.append('iPhone 14') # После минутных раздумий
print(list_of_wishes)
Другие методы списка
.extend(list)
.insert(list)
.remove(x)
.pop(x)
.clear()
first = [1, 2, 3]
second = [5, 6, 7]
first.extend(second)
print(len(first))
print(first)
Метод .extend()
изменяет изначальный список first
, а не создает новый. С этим нужно быть внимательными!
Создать новый список из двух старых поможет оператор +:
sweet = ['конфета', 'шоколадка']
salty = ['крекер', 'сухарик']
basket = sweet + salty
print(basket)
Вот тут можно посмотреть все методы списков и что они делают.
Кортежи
Кортеж (tuple) – упорядоченная неизменяемая коллекция элементов различных типов.
Создание кортежа
tpl = tuple('student')
tpl_2 = ('абитуриент', 'студент', 'аспирант', 'выпускник')
- Попробуйте создать кортеж из одного элемента. Что получается?
“Добавление” элементов в кортеж
Можно пользоваться оператором сложения.
>>> (1, 2) + (3, 4)
Индексы и срезы
Работают так же как и со списками с точностью до изменяемости.
Снова про изменяемость
>>> a_list = [1, 2, 3] # список
>>> a_tuple = (1, 2, 3) # кортеж
>>> id(a_list)
>>> id(a_tuple)
>>> id_list_before = id(a_list)
>>> id_tuple_before = id(a_tuple)
>>> a_list.extend([3, 4])
>>> id_list_after = id(a_list)
>>> id_tuple_after = id(a_tuple + (3, 4))
>>> id_list_after == id_list_before
>>> id_tuple_after == id_tuple_before
- Попробуйте создать новый список с помощью оператора сложения и посмотреть, что будет с айдишнкиами. Почему так?
Ещё про списки
original_list = [1, 2, 3]
new_list = original_list
new_list.append(4)
print(new_list)
original_list = [1, 2, 3]
new_list = original_list
new_list.append(4)
newnew_list = new_list
newnew_list.append(5)
print(new_list)
print(newnew_list)
Вопрос: что выведет код ниже и почему?
print(original_list)
print(id(original_list) == id(new_list))
Задачи
-
Дан список некоторых целых чисел, найдите значение 20 в нем и, если оно присутствует, замените его на 200. Обновите список только при первом вхождении числа 20.
-
Дан список чисел. Выведите значение наибольшего элемента в списке, а затем индекс этого элемента в списке. Если наибольших элементов несколько, выведите индекс первого из них.
-
Заполнить список ста нулями, кроме первого и последнего элементов, которые должны быть равны единице.
-
Сформировать возрастающий список из чётных чисел (количество элементов 45)