- Создавать список, собирать 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] — предпоследний.
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.
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.
# 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() не работает, поэтому в следующем примере строки, которые пришли бы с клавиатуры, заданы в переменных.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 на списки написаны во второй форме.
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 |
range не входит.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]
Определите результат программы выше.
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) | сколько раз встречается 2 | 2 |
a.index(8) | индекс первого 8 | 2 |
len(a), sum(a) | количество элементов, сумма | 4, 17 |
min(a), max(a) | наименьший, наибольший элемент | 2, 8 |
b = sorted(a) | новый отсортированный список; a не меняется | b = [2, 2, 5, 8] |
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
Определите число, которое выведет программа.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Пустой список
Создай
b = []для результата до цикла. - 2Цикл
Обойди исходный список по значениям (
for x in a) или по индексам (for i in range(0, len(a))). - 3Условие
Проверь условие для каждого элемента, например
if x % 2 == 0:. - 4Добавь
Если условие выполнено, добавь элемент (или вычисленное из него значение) через
b.append(...). - 5Выведи
После цикла напиши
print(b)— Python выводит список в виде[6, 15, 9], с квадратными скобками и запятыми.
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.
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
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]
Определите результат программы выше.
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].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
Определите число, которое выведет программа выше.
Показать решениеСкрыть решение
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.a = [4, 1]; после a.(7) список равен [4, 1, 7]
- 2.a = [6, 2, 9]; после x = a.(0) имеем x = 6, a = [2, 9]
- 3.a = [2, 7, 7]; после a.(7) список равен [2, 7]
- 4.a = [3, 5, 3, 3]; значение a.(3) равно 3
- 5.a = [8, 1, 5]; после a.() список равен [1, 5, 8]
- 6.a = [8, 1, 5]; функция (a) возвращает 3
На экзамене список вводился бы с клавиатуры; здесь он задан. Собери элементы, которые больше обоих соседей (первый и последний элементы не проверяются), в новый список b, выведи b, а затем сумму индексов этих элементов.
a = [3, 9, 4, 4, 7, 2, 8, 1]
b = []
s = 0
# your loop here▸ Ожидаемый результат
[9, 7, 8] 11
Убери повторы из списка a: каждое значение остаётся только там, где встретилось впервые; выведи новый список u. Затем выведи, сколько различных значений встречается в a больше одного раза.
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.
a[-2] в списке a = [4, 8, 15, 16, 23]?