Списки и кортежи | Питон и КИЛИ

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

Встроенные типы данных в 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))

Задачи

  1. Дан список некоторых целых чисел, найдите значение 20 в нем и, если оно присутствует, замените его на 200. Обновите список только при первом вхождении числа 20.

  2. Дан список чисел. Выведите значение наибольшего элемента в списке, а затем индекс этого элемента в списке. Если наибольших элементов несколько, выведите индекс первого из них.

  3. Заполнить список ста нулями, кроме первого и последнего элементов, которые должны быть равны единице.

  4. Сформировать возрастающий список из чётных чисел (количество элементов 45)