Перейти к содержанию
Educora
Средний9 класс25 мин35 / 59

Списки и операции над ними

Создание списка, ввод n чисел с клавиатуры в пустой список, индексы и соседние элементы, методы списков и задания DİM на трассировку.

Проверь себя
В этом уроке ты узнаешь
  • Создавать список, собирать n введённых с клавиатуры чисел в пустой список и обращаться к элементу по индексу (в том числе отрицательному).
  • Обходить список по значениям и по индексам и использовать соседей a[i - 1] и a[i + 1], не выходя за границы списка.
  • Применять методы append, insert, remove, pop, reverse, sort, count, index и функции len, sum, min, max.
  • Пошагово трассировать программу, которая меняет элементы в цикле, и строить новый список по условию.

«В классе 25 учеников — нужно 25 отдельных переменных для их баллов?» Нет: есть список, который хранит все значения под одним именем. Списки были на всех вступительных экзаменах DİM по информатике в 2025–2026 годах: программа меняет элементы в цикле, в конце стоит print(a), а пять вариантов ответа часто отличаются одним-единственным элементом. В письменной части тоже часто встречается фраза «n целых чисел вводятся с клавиатуры в пустой список…». В этом уроке мы разберём списки так, чтобы ты мог проследить судьбу каждого элемента шаг за шагом.

Список, элемент и индекс

Определение
Список

Последовательность элементов через запятую в квадратных скобках: a = [7, 3, 9, 3, 5]. Порядок сохраняется, одно значение может встречаться несколько раз, а сам список можно менять после создания: заменять, добавлять и удалять элементы. Пустой список записывается как [].

Определение
Индекс

Порядковый номер элемента в списке; начинается с 0. В списке из n элементов индексы 0, 1, …, n − 1, а a[i] — элемент с индексом i. Отрицательные индексы считаются с конца: a[-1] — последний элемент, a[-2] — предпоследний.

индекс0123473935a-5-4-3-2-1отрицательный индекс — счёт с конца
len(a) = 5, последний индекс len(a) - 1 = 4; a[4] и a[-1] — один и тот же элемент.

Запомни три правила. len(a) даёт количество элементов, поэтому последний индекс — len(a) - 1; обращение a[len(a)] вызывает ошибку IndexError. Присваивание a[i] = x заменяет элемент на месте — длина списка не меняется. Выражение x in a проверяет, есть ли значение x в списке, и даёт True или False.

Python
a = [7, 3, 9, 3, 5]
print(len(a), a[0], a[-1])
a[1] = a[1] * 10
a[-1] = a[0] + a[2]
print(a)
print(3 in a, 5 in a)
▸ Ожидаемый результат
5 7 5
[7, 30, 9, 3, 16]
True False

На экзамене список обычно заполняется с клавиатуры. Чаще всего встречаются две формы. Первая: сначала n, затем n чисел, каждое на отдельной строке, — создаётся пустой список, и каждое число добавляется в конец методом append. Вторая: все значения в одной строке через пробел — тогда input().split(' ') разрезает строку на части. Внимание: split возвращает список строк, перед вычислениями их нужно превратить в числа с помощью int.

Python
# form 1: n, then n numbers, each on its own line
n = int(input())
a = []
for i in range(0, n):
    a.append(int(input()))

# form 2: all numbers on one line, e.g. 12 5 8
b = input().split(' ')
for i in range(0, len(b)):
    b[i] = int(b[i])
Экзаменационный вариант с input(). В браузере input() не работает, поэтому в следующем примере строки, которые пришли бы с клавиатуры, заданы в переменных.
Python
lines = ['3', '4', '-2', '7']    # what the keyboard would give
n = int(lines[0])
a = []
for i in range(1, n + 1):
    a.append(int(lines[i]))
print(a)

b = '12 5 8'.split(' ')
print(b, b[0] + b[1])
for i in range(0, len(b)):
    b[i] = int(b[i])
print(b, b[0] + b[1])
▸ Ожидаемый результат
[4, -2, 7]
['12', '5', '8'] 125
[12, 5, 8] 17

Обход списка: по значениям и по индексам

В цикле for x in a: переменная x по очереди принимает значения элементов — это удобно для чтения, но присваивание x = … не меняет список, потому что x — всего лишь копия. В цикле for i in range(0, len(a)): переменная i принимает индексы: a[i] — сам элемент, его можно изменить, прибавить его индекс к сумме и посмотреть на соседей. Большинство заданий DİM на списки написаны во второй форме.

Python
a = [4, 7, 1, 8]
for x in a:
    x = x * 2
print(a)
for i in range(0, len(a)):
    a[i] = a[i] * 2
print(a)
s = 0
for i in range(0, len(a)):
    if a[i] > 5:
        s = s + i
print(s)
▸ Ожидаемый результат
[4, 7, 1, 8]
[8, 14, 2, 16]
4

Работая с соседними элементами, следи за границами цикла: a[i + 1] существует только при i ≤ len(a) − 2, а a[i - 1] имеет смысл только при i ≥ 1. При i = 0 выражение a[i - 1] не вызывает ошибку — это a[-1], то есть последний элемент. Таблица показывает, какой заголовок цикла нужен для какой задачи.

Что нужноЗаголовок циклаЗначения i
каждый элементfor i in range(0, len(a))0 … n − 1
a[i] и a[i + 1]for i in range(0, len(a) - 1)0 … n − 2
a[i - 1] и a[i]for i in range(1, len(a))1 … n − 1
a[i - 1], a[i] и a[i + 1]for i in range(1, len(a) - 1)1 … n − 2
n = len(a). Правая граница range не входит.
Python
a = [2, 5, 3, 1, 4, 9, 1, 7]
s = 0
for i in range(1, len(a) - 1):
    if a[i] > a[i - 1] and a[i] > a[i + 1]:
        s = s + a[i]
        a[i] = 0
print(s, a)
▸ Ожидаемый результат
17 [2, 0, 0, 1, 4, 0, 1, 7]
Задание в стиле DİM (закрытое)

Определите результат программы выше.
A) 14 [2, 0, 3, 1, 4, 0, 1, 7]
B) 17 [2, 0, 0, 1, 4, 0, 1, 7]
C) 17 [2, 5, 3, 1, 4, 9, 1, 7]
D) 21 [2, 0, 0, 1, 4, 0, 0, 7]
E) 14 [2, 5, 3, 1, 4, 9, 1, 7]

Показать решение
i меняется от 1 до 6 (range(1, 7)). На каждом шаге смотрим на текущее состояние списка:
i = 1: 5 > 2 и 5 > 3 → s = 5, a[1] = 0
i = 2: 3 > 0 (a[1] уже 0) и 3 > 1 → s = 8, a[2] = 0
i = 3: 1 > 0, но 1 > 4 неверно
i = 4: 4 > 1, но 4 > 9 неверно
i = 5: 9 > 4 и 9 > 1 → s = 17, a[5] = 0
i = 6: 1 > 0, но 1 > 7 неверно
Ответ: B. Вариант A — ошибка тех, кто смотрит на исходный список: они пропускают 3.

Методы списков и встроенные функции

Метод пишется после имени списка через точку: a.append(5). Функция принимает список в скобках: len(a). Методы append, insert, remove, pop, reverse, sort меняют сам список; count и index только сообщают сведения. Каждая строка таблицы снова начинается со списка a = [5, 2, 8, 2].

ЗаписьЧто делаетРезультат
a.append(4)добавляет 4 в конец[5, 2, 8, 2, 4]
a.insert(1, 9)ставит 9 на место с индексом 1, остальные сдвигаются вправо[5, 9, 2, 8, 2]
a.remove(2)удаляет первое вхождение значения 2[5, 8, 2]
x = a.pop(0)удаляет элемент с индексом 0 и возвращает его; a.pop() берёт последнийx = 5, [2, 8, 2]
a.reverse()переворачивает порядок[2, 8, 2, 5]
a.sort()сортирует по возрастанию; a.sort(reverse=True) — по убыванию[2, 2, 5, 8]
a.count(2)сколько раз встречается 22
a.index(8)индекс первого 82
len(a), sum(a)количество элементов, сумма4, 17
min(a), max(a)наименьший, наибольший элемент2, 8
b = sorted(a)новый отсортированный список; a не меняетсяb = [2, 2, 5, 8]
Python
a = [5, 2, 8, 2]
a.append(4)
a.insert(1, 9)
a.remove(2)
x = a.pop()
print(a, x)
a.sort()
print(a, a.count(2), a.index(8))
print(len(a), sum(a), min(a), max(a))
▸ Ожидаемый результат
[5, 9, 8, 2] 4
[2, 5, 8, 9] 1 2
4 24 2 9
Задание в стиле DİM (с кодируемым ответом)

Определите число, которое выведет программа.
a = [3, 8, 3, 5, 8, 1]
a.remove(8)
a.insert(2, a.pop())
a.append(a.count(3))
print(a.index(1) + a[-1] + len(a))

Показать решение
remove(8) удаляет первое 8: [3, 3, 5, 8, 1].
a.insert(2, a.pop()): сначала вычисляется аргумент — pop() забирает последнюю 1, a = [3, 3, 5, 8]; затем 1 ставится на место с индексом 2: [3, 3, 1, 5, 8].
count(3) = 2 добавляется в конец: [3, 3, 1, 5, 8, 2].
a.index(1) = 2, a[-1] = 2, len(a) = 6.
Ответ: 2 + 2 + 6 = 10.

Новый список по условию. Списки и строки

  1. 1
    Пустой список

    Создай b = [] для результата до цикла.

  2. 2
    Цикл

    Обойди исходный список по значениям (for x in a) или по индексам (for i in range(0, len(a))).

  3. 3
    Условие

    Проверь условие для каждого элемента, например if x % 2 == 0:.

  4. 4
    Добавь

    Если условие выполнено, добавь элемент (или вычисленное из него значение) через b.append(...).

  5. 5
    Выведи

    После цикла напиши print(b) — Python выводит список в виде [6, 15, 9], с квадратными скобками и запятыми.

Python
a = [12, 7, 30, 5, 18, 7]
b = []
for x in a:
    if x % 2 == 0:
        b.append(x // 2)
print(b)
c = []
for x in a:
    if c.count(x) == 0:
        c.append(x)
print(c, len(c))
▸ Ожидаемый результат
[6, 15, 9]
[12, 7, 30, 5, 18] 5

Переход между списком и строкой часто нужен в программах DİM. list('2026') превращает строку в список символов: ['2', '0', '2', '6']. ''.join(c) склеивает список строк в одну строку (разделитель — строка перед точкой). s.split(' ') разрезает строку по пробелам. Чтобы перевернуть число, используют цепочку str(n) → list → reverse() → join → int.

Python
n = 1720
c = list(str(n))
print(c)
c.reverse()
r = int(''.join(c))
print(r, n + r)
w = '12 5 40'.split(' ')
print(w, len(w))
print('-'.join(w))
▸ Ожидаемый результат
['1', '7', '2', '0']
271 1991
['12', '5', '40'] 3
12-5-40
Python
a = [6, 1, 4, 9, 4, 2, 7, 3]
b = [4, 7, 1]
for i in range(0, len(a) - 1):
    if b.count(a[i]) > 0:
        a[i + 1] = a[i + 1] + a[i]
print(a)
▸ Ожидаемый результат
[6, 1, 5, 9, 4, 6, 7, 10]
Задание в стиле DİM (закрытое)

Определите результат программы выше.
A) [6, 1, 5, 14, 4, 6, 7, 10]
B) [6, 5, 13, 9, 6, 2, 10, 3]
C) [6, 1, 5, 9, 4, 6, 7, 10]
D) [6, 1, 5, 9, 4, 6, 7, 3]
E) [6, 1, 4, 9, 4, 2, 7, 3]

Показать решение
Условие b.count(a[i]) > 0 означает «есть ли a[i] в b?»; i меняется от 0 до 6.
i = 0: 6 в b нет.
i = 1: 1 есть → a[2] = 4 + 1 = 5
i = 2: a[2] уже 5, в b его нет (кто смотрит на старое 4, выберет A)
i = 3: 9 нет. i = 4: 4 есть → a[5] = 2 + 4 = 6
i = 5: 6 нет. i = 6: 7 есть → a[7] = 3 + 7 = 10
Ответ: C. D забывает последний шаг (i = 6), B меняет a[i] вместо a[i + 1].
Python
a = [3, 5, 7, 8, 10, 12, 15, 17, 19]
s = 0
i = 1
while i < len(a) - 1:
    if a[i] - a[i - 1] == a[i + 1] - a[i]:
        s = s + i
    i = i + 1
print(s)
▸ Ожидаемый результат
12
Задание в стиле DİM (с кодируемым ответом)

Определите число, которое выведет программа выше.

Показать решение
Условие означает, что a[i] лежит ровно посередине между соседями: разности слева и справа равны. i меняется от 1 до 7:
i = 1: 5 − 3 = 2, 7 − 5 = 2 → s = 1
i = 2: 2 и 1 — нет; i = 3: 1 и 2 — нет
i = 4: 10 − 8 = 2, 12 − 10 = 2 → s = 1 + 4 = 5
i = 5: 2 и 3 — нет; i = 6: 3 и 2 — нет
i = 7: 17 − 15 = 2, 19 − 17 = 2 → s = 5 + 7 = 12
Складываются индексы, а не значения. Ответ: 12.
Назови метод
  1. 1.a = [4, 1]; после a.(7) список равен [4, 1, 7]
  2. 2.a = [6, 2, 9]; после x = a.(0) имеем x = 6, a = [2, 9]
  3. 3.a = [2, 7, 7]; после a.(7) список равен [2, 7]
  4. 4.a = [3, 5, 3, 3]; значение a.(3) равно 3
  5. 5.a = [8, 1, 5]; после a.() список равен [1, 5, 8]
  6. 6.a = [8, 1, 5]; функция (a) возвращает 3
Задание

На экзамене список вводился бы с клавиатуры; здесь он задан. Собери элементы, которые больше обоих соседей (первый и последний элементы не проверяются), в новый список b, выведи b, а затем сумму индексов этих элементов.

Задание · Python
a = [3, 9, 4, 4, 7, 2, 8, 1]
b = []
s = 0
# your loop here
▸ Ожидаемый результат
[9, 7, 8]
11
Задание

Убери повторы из списка a: каждое значение остаётся только там, где встретилось впервые; выведи новый список u. Затем выведи, сколько различных значений встречается в a больше одного раза.

Задание · Python
a = [5, 3, 5, 2, 3, 5, 9]
u = []
k = 0
▸ Ожидаемый результат
[5, 3, 2, 9]
2

Индексы, len и in так же работают со строками — ты видел это в уроке «Строки и операции над ними». В следующем уроке, «Функция: def, параметры и return», мы будем читать программы, которые передают каждый элемент списка в функцию (a[i] = k(a[i])). Дополнительные возможности — срезы (a[1:4]) и генераторы списков — есть в уроке «Списки» курса Python.

Главное

  • Индексы идут от 0 до len(a) − 1; a[-1] — последний элемент.
  • Список с клавиатуры: a = [] и a.append(int(input())) в цикле; из одной строки — input().split(' ') и перевод через int.
  • Чтобы менять элементы и смотреть на соседей, обходи по индексам; для a[i ± 1] сужай границы цикла.
  • remove удаляет по значению, pop — по индексу; sort, reverse, append возвращают None.
  • При трассировке всегда смотри на текущий список: изменённый элемент влияет на следующие шаги.

Проверь себя

Вопросов: 12. Каждый правильный ответ приносит XP.

1 / 12
Чему равно a[-2] в списке a = [4, 8, 15, 16, 23]?