Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the acf domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/html/wp-includes/functions.php on line 6131 Python. Изменение списков, срезы – 100балльный репетитор

Python. Изменение списков, срезы

11 класс

Поделиться статьей:

Informatics

Введение

В этой статье продолжим знакомиться со списками. Рассмотрим их методы и научимся делать срезы.

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

списочные методы, ссылочный тип данных, ссылка, объект, срез, отрицательная индексация.

Списочные методы

  1. append(x) — добавление элемента в конец списка.

    nums = [1, 2, 3]

    nums.append(4)

    print(nums) # [1, 2, 3, 4]

  2. remove(x) — удаление первого найденного элемента x.

    items = [‘apple’, ‘banana’, ‘apple’]

    items.remove(‘apple’)

    print(items) # [‘banana’, ‘apple’] (удалился только первый ‘apple’)

  3. pop([index]) — удаление и возврат элемента по индексу (по умолчанию последнего).

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

    numbers = [10, 20, 30]

    last = numbers.pop()

    print(last) # 30

    print(numbers) # [10, 20]

    second = numbers.pop(0)

    print(second) # 10

  4. clear() — полная очистка списка.

    data = [1, 2, 3]

    data.clear()

    print(data) # []

  5. index(x) — поиск индекса первого вхождения элемента.

    colors = [‘red’, ‘green’, ‘blue’, ‘green’]

    idx = colors.index(‘green’)

    print(idx) # 1

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

    colors = [‘red’, ‘green’, ‘blue’, ‘green’]

    idx = colors.index(‘black’)

    print(idx) # ValueError: ‘black’ is not in list

  6. count(x) — подсчёт количества вхождений элемента.

    scores = [5, 3, 5, 4, 5, 2]

    count_fives = scores.count(5)

    print(count_fives) # 3

  7. sort(reverse=False) — сортировка списка на месте.

    Исходный список сортируется по возрастанию, если указать reverse=False или не указывать вовсе, по убыванию, если указать reverse=True. При этом изменяется текущий список, новый создан не будет.

    numbers = [3, 1, 4, 2]

    numbers.sort()

    print(numbers) # [1, 2, 3, 4]

    numbers.sort(reverse=True)

    print(numbers) # [4, 3, 2, 1]

  8. copy() — создание копии списка.

    Чтобы скопировать список в другую переменную, недостаточно просто сделать присваивание list2 = list1. Это связано с тем, что список — ссылочный тип данных: переменная хранит не сам список, а ссылку на область памяти, где он расположен.

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

    Для создания независимой копии используется метод copy(). Он создаёт новый объект-список с такими же элементами и возвращает ссылку на него. После этого list1 и list2 ссылаются на разные объекты.

Проблема при обычном присваивании

list1 = [1, 2, 3]

list2 = list1 — копируется ссылка, а не список.

list2.append(4)

print(list1) # [1, 2, 3, 4] — изменился и list1!

Правильное копирование

list1 = [1, 2, 3]

list2 = list1.copy() — создаётся новый список.

list2.append(4)

print(list1) # [1, 2, 3] — list1 не изменился.

print(list2) # [1, 2, 3, 4]

Это не все методы списков, лишь основные, которые понадобятся тебе в ЕГЭ. Давай закрепим важные особенности:

  1. Методы, изменяющие список (append, remove, pop, clear, sort), работают на месте (изменяют исходный список).
  2. Методы index, count, copy не изменяют исходный список.
  3. pop() возвращает удалённый элемент, remove() — нет.

Забирай курсы подготовки к ОГЭ и ЕГЭ с жирной скидкой

Функции для работы со списками

Рассмотрим основные функции для работы с коллекциями, в них можно передать список и получить определённый результат:

  1. len() — возвращает длину (количество элементов) списка,
  2. min() — возвращает наименьший элемент списка,
  3. max() — возвращает наибольший элемент списка,
  4. sum() — возвращает сумму всех элементов списка (элементы должны быть числами),
  5. sorted() — возвращает новый отсортированный список, есть параметр reverse= как у метода sort().

В случае функций min() и max() обязательно выполнение условия — все элементы должны быть одного и того же типа данных, это обусловлено тем, что разные типы данных не сравнимы друг с другом, а значит определить, какой из них больше/меньше невозможно.

Важно! sort() изменяет список, sorted() — возвращает новый отсортированный список.

Срезы

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

Структура

подсписок = список[начало : конец : шаг]

Срез всегда возвращает ссылку на новый объект-список.

Начало — индекс, с которого начинается срез (включительно),

Конец — индекс, на котором заканчивается срез (не включительно),

Шаг — интервал между элементами.

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Элементы с индекса 2 до 5 (5 не включается).

print(numbers[2:5]) # [2, 3, 4]

Если срез начинается с 0 индекса, то ноль можно опустить и ничего не писать:

С начала до индекса 4.

print(numbers[:4]) # [0, 1, 2, 3]

Если срез идёт до конца, последний индекс можно также опустить:

С индекса 6 до конца.

print(numbers[6:]) # [6, 7, 8, 9]

Можно создать копию списка (именно новый объект с новой ссылкой):

Весь список (копия).

print(numbers[:]) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Срез с шагом работает аналогично функции range(), по умолчанию шаг равен единице.

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Каждый второй элемент.

print(numbers[::2]) # [0, 2, 4, 6, 8]

С шагом 3, начиная с индекса 1.

print(numbers[1::3]) # [1, 4, 7]

Обратный порядок (разворот списка).

print(numbers[::–1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

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

Отрицательные индексы отсчитываются с конца списка (–1 — последний элемент).

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Последние 3 элемента.

print(numbers[–3:]) # [7, 8, 9]

Все кроме последних 3.

print(numbers[:–3]) # [0, 1, 2, 3, 4, 5, 6]

С –5 до –2.

print(numbers[–5:–2]) # [5, 6, 7]

Изменение списка через срез

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

numbers = [0, 1, 2, 3, 4]

Замена части списка.

numbers[1:3] = [10, 20, 30] — вставка больше элементов.

print(numbers) # [0, 10, 20, 30, 3, 4]

Удаление элементов.

numbers[2:4] = []

print(numbers) # [0, 10, 4]

Особенности работы со срезами

  1. Индексы за пределами списка не вызывают ошибку.
    nums = [1, 2, 3]

    print(nums[1:10]) # [2, 3] — просто обрезается.

  2. Пустой список, если начало >= конца.

    print(nums[3:1]) # []

  3. При отрицательном шаге начало должно быть >= конца.

    print(nums[3:1:–1]) # [3, 2]

Поздравляю с завершением цикла статей про списки! Для усвоения такого большого количества материала попрактикуйся на задачах. Удачи!

Реши задачи

Задача 1: базовая работа с методами списка

Дан список чисел: [5, 2, 8, 2, 4, 2, 9].

  1. Добавьте в конец число 7.
  2. Удалите первое вхождение числа 2.
  3. Удалите элемент с индексом 3 и сохраните его в переменную removed.
  4. Найдите индекс числа 8.
  5. Отсортируйте список по возрастанию.

Выведите итоговый список и значение removed.

numbers = [5, 2, 8, 2, 4, 2, 9]

numbers.append(7) # [5, 2, 8, 2, 4, 2, 9, 7]

numbers.remove(2) # [5, 8, 2, 4, 2, 9, 7]

removed = numbers.pop(3) # удаляем элемент с индексом 3 (4)

idx = numbers.index(8) # находим индекс 8

numbers.sort() # сортируем

print(numbers) # [2, 2, 5, 7, 8, 9]

print(removed) # 4

Задача 2: копирование и изменение списков

  1. Создайте список original = [10, 20, 30, 40].
  2. Создайте переменную copy1 = original.
  3. Создайте переменную copy2 = original.copy().
  4. Добавьте число 50 в copy1.
  5. Добавьте число 60 в copy2.
  6. Удалите число 30 из original.

Выведите все три списка.

original = [10, 20, 30, 40]

copy1 = original # копируется ссылка

copy2 = original.copy() # создаётся новый список

copy1.append(50) # изменится original и copy1

copy2.append(60) # изменится только copy2

original.remove(30) # изменится original и copy1

print(“original:”, original) # [10, 20, 40, 50]

print(“copy1:”, copy1) # [10, 20, 40, 50]

print(“copy2:”, copy2) # [10, 20, 30, 40, 60]

Задача 3: срезы списка

Дан список: nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].

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

  1. Содержащий элементы с индексами от 3 до 7 включительно.
  2. Содержащий первые 5 элементов.
  3. Содержащий последние 4 элемента.
  4. Содержащий каждый второй элемент всего списка.
  5. Содержащий список в обратном порядке.

Выведите все полученные списки.

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

slice1 = nums[3:8] # [3, 4, 5, 6, 7]

slice2 = nums[:5] # [0, 1, 2, 3, 4]

slice3 = nums[–4:] # [6, 7, 8, 9]

slice4 = nums[::2] # [0, 2, 4, 6, 8]

slice5 = nums[::–1] # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

print(“1:”, slice1)

print(“2:”, slice2)

print(“3:”, slice3)

print(“4:”, slice4)

print(“5:”, slice5)

Задача 4: функции для работы со списками

Дан список чисел: data = [12, 45, 3, 67, 23, 9, 34].

Вычислите и выведите:

  1. Длину списка.
  2. Минимальный элемент.
  3. Максимальный элемент.
  4. Сумму всех элементов.
  5. Новый отсортированный список (по возрастанию).
  6. Новый отсортированный список (по убыванию).

data = [12, 45, 3, 67, 23, 9, 34]

length = len(data) # 7

minimum = min(data) # 3

maximum = max(data) # 67

total = sum(data) # 193

sorted_asc = sorted(data) # [3, 9, 12, 23, 34, 45, 67]

sorted_desc = sorted(data, reverse=True) # [67, 45, 34, 23, 12, 9, 3]

print(“Длина:”, length)

print(“Минимум:”, minimum)

print(“Максимум:”, maximum)

print(“Сумма:”, total)

print(“По возрастанию:”, sorted_asc)

print(“По убыванию:”, sorted_desc)

print(“Исходный список:”, data) # не изменился

Задача 45: изменение списка через срезы

Дан список: items = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]..

  1. Измените список с помощью срезов.
  2. Замените элементы с индексами 1:3 на [‘x’, ‘y’, ‘z’].
  3. Удалите элементы с индексами 4:6.
  4. Вставьте [‘p’, ‘q’] между элементами с индексами 2 и 3.
  5. Скопируйте список с помощью среза.

Выведите все результаты.

items = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]

  1. Замена части списка.

    items[1:3] = [‘x’, ‘y’, ‘z’] # [‘a’, ‘x’, ‘y’, ‘z’, ‘d’, ‘e’, ‘f’]

    print(“1:”, items)

  2. Удаление элементов через срез.

    items[4:6] = [] # [‘a’, ‘x’, ‘y’, ‘z’, ‘f’]

    print(“2:”, items)

    Вставка элементов (пустой срез).

    items[3:3] = [‘p’, ‘q’] # [‘a’, ‘x’, ‘y’, ‘p’, ‘q’, ‘z’, ‘f’]

    print(“3:”, items)

  3. Копирование с помощью среза.

    items_copy = items[:] # создаём полную копию

    items_copy.append(‘новый’)

    print(“Оригинал:”, items) # не изменился

    print(“Копия:”, items_copy) # с добавленным элементом

Автор:

Быкова Оксана, методист «100балльного репетитора» по информатике ЕГЭ

Забирай курсы подготовки к ОГЭ и ЕГЭ с жирной скидкой

В 100б ты пробьёшь свой
максимум на экзаменах

наши лучшие курсы

Выбери подходящий курс и предмет, чтобы прокачаться и сдать ОГЭ на «5», а ЕГЭ на 80+ баллов

Выбрать курс

бесплатные материалы

Курсы, вебы, чек-листы — всё за 0 ₽

Забрать за 0 ₽

Интенсив по поступлению

Запишись на интенсив по поступлению, чтобы
взять из ЕГЭ максимум и попасть в вуз мечты

Записаться
В 100балльном репетиторе ты пробьёшь свой максимум на экзаменах

Преимущества подготовки
в 100балльном

10+
лет средний опыт наших преподавателей

18
выпускников сдали ЕГЭ
на 200 из 200 в 2024 году

300k+
учеников поступили в вуз мечты с нашей помощью 

14%
стобалльников России — наши выпускники

2 347
выпускника сдали ЕГЭ на 100 баллов

Преимущества подготовки в 100балльном

Запишись
на бесплатный
вводный урок

Познакомим с преподавателями и платформой

Расскажем про учёбу

Поможем поставить цель

  • 11 класс
  • 10 класс
  • 9 класс
  • 8 класс
  • 7 класс
Запись на вводный урок