edubun
Русский

Списки

У списка из 5 элементов индексы от 0 до 4, поэтому menu[4] даёт последний элемент, а menu[5] останавливает программу с IndexError.

В одной переменной можно хранить целое меню

В школьном меню несколько блюд, а в списке покупок несколько товаров. Можно завести по переменной на блюдо: dish1, dish2, dish3, но при расширении меню такой способ перестаёт работать. В списке можно хранить сколько угодно значений в одной переменной, сохраняя порядок. Запиши значения в квадратных скобках через запятую.

menu = ["rice", "seaweed soup", "bulgogi", "kimchi", "milk"]
print(menu)
print(len(menu))
print(menu[0], menu[-1])
Вывод
['rice', 'seaweed soup', 'bulgogi', 'kimchi', 'milk']
5
rice milk

В списках те же индексы, что и в строках: 0 для первого элемента, -1 для последнего, а также срезы вроде menu[1:3]. Функция len() возвращает число элементов. При выводе целого списка Python показывает скобки и обрамляет каждую строку одинарными кавычками, чтобы были видны границы элементов.

В отличие от строк, списки можно менять

Строку нельзя редактировать на месте, а список можно. Присваивание по индексу заменяет элемент. append() добавляет элемент в конец, remove() удаляет первое совпавшее значение, а pop() снимает последний элемент и возвращает его. Ключевое слово in проверяет наличие значения в списке. Эти методы меняют сам список: в этом главное отличие от методов строк.

cart = ["eggs", "milk"]
cart.append("tofu")
cart[0] = "ramen"
print(cart)
cart.remove("milk")
last = cart.pop()
print(cart, last)
print("tofu" in cart)
Вывод
['ramen', 'milk', 'tofu']
['ramen'] tofu
False
После этой строкиcart
cart = ["eggs", "milk"]['eggs', 'milk']
cart.append("tofu")['eggs', 'milk', 'tofu']
cart[0] = "ramen"['ramen', 'milk', 'tofu']
cart.remove("milk")['ramen', 'tofu']
last = cart.pop()['ramen'] (last равно 'tofu')

Для списков чисел есть готовые инструменты

Для списка чисел sum(), min() и max() находят сумму, минимум и максимум. sorted() возвращает новый упорядоченный список, не трогая исходный, а метод sort() упорядочивает сам список и ничего не возвращает. Среднее равно сумме, делённой на число элементов; здесь удобно использовать len().

scores = [72, 95, 88, 64, 81]
print(sum(scores), min(scores), max(scores))
print(sum(scores) / len(scores))
print(sorted(scores))
print(scores)
Вывод
400 64 95
80.0
[64, 72, 81, 88, 95]
[72, 95, 88, 64, 81]

Два имени могут указывать на один список

Здесь ошибается почти каждый. После b = a списков не два. Есть один список с двумя именами. Измени его через b, и изменение будет видно через a, ведь a и b обозначают один список. С числами и строками ты этого не замечаешь: их нельзя менять на месте. Со списками разница видна. Если нужна отдельная копия, создай её с помощью a.copy() или среза a[:].

b = a не копирует список. Оба имени указывают на один список, поэтому результат b.append(...) виден и при выводе a.
a = ["rice", "soup"]
b = a
b.append("kimchi")
print(a)
c = a.copy()
c.append("egg")
print(a)
print(c)
Вывод
['rice', 'soup', 'kimchi']
['rice', 'soup', 'kimchi']
['rice', 'soup', 'kimchi', 'egg']

Списки удобно использовать вместе с циклами. Список из 30 оценок полезен, только если программа может обработать каждую без 30 отдельных строк. Это делает цикл for из урока о циклах. Пока вместо тебя элементы обходят sum(), min(), max() и len(), каждая за один вызов функции.

списокЗначения по порядку в [ ], разделённые запятыми
append(x)Добавляет x в конец списка
remove(x)Удаляет первый элемент, равный x
pop()Снимает последний элемент и возвращает его
sorted(list)Новый отсортированный список; исходный не меняется
list.sort()Сортирует сам список и возвращает None
a.copy()Отдельная копия списка a
  1. Что выведет этот код?
    nums = [10, 20, 30, 40]
    print(nums[2])
  2. Что выведет этот код?
    nums = [10, 20, 30, 40]
    print(nums[-1] + nums[0])
  3. Что выведет этот код?
    bag = ["pen"]
    bag.append("ruler")
    bag.append("eraser")
    print(len(bag))
  4. Что выведет этот код?
    x = [3, 1, 2]
    y = sorted(x)
    print(x, y)
    • [3, 1, 2] [1, 2, 3]
    • [1, 2, 3] [1, 2, 3]
    • [1, 2, 3] [3, 1, 2]
    • [3, 1, 2] None
  5. Что выведет этот код?
    x = [3, 1, 2]
    y = x.sort()
    print(x, y)
    • [3, 1, 2] [1, 2, 3]
    • [1, 2, 3] [1, 2, 3]
    • [1, 2, 3] None
    • An error
  6. Что выведет этот код?
    a = [1, 2]
    b = a
    b.append(3)
    print(a)
    • [1, 2]
    • [1, 2, 3]
    • [3]
    • An error
  7. Что выведет этот код?
    marks = [70, 90, 80]
    print(sum(marks) / len(marks))
  8. Что выведет этот код?
    stations = ["Seoul", "Yongsan", "Noryangjin", "Daebang"]
    print(stations[1:3])
  9. Что выведет этот код?
    stack = ["a", "b", "c"]
    top = stack.pop()
    print(top, len(stack))
  10. Что выведет этот код?
    print("milk" in ["eggs", "milk", "tofu"])
  11. Расположи строки по порядку, чтобы программа вывела список ниже.
    Вывод
    ['homework', 'piano']
Частые ошибки
  • «Последний элемент находится в menu[len(menu)]». При 5 элементах индексы заканчиваются на 4, поэтому menu[5] вызывает IndexError: list index out of range. Используй menu[-1] или menu[len(menu) - 1].
  • «menu = menu.append(x) сохраняет новый список». append() меняет список и возвращает None, поэтому такая строка заменяет весь список значением None. Напиши menu.append(x) отдельно.
  • «b = a создаёт резервную копию списка». Так один список получает второе имя. Изменения, сделанные через любое из имён, видны в обоих. Для настоящей копии используй b = a.copy().
Заметка для учителяПример с обедом понятен, потому что каждый ученик ежедневно читает меню. Пусть ученики запишут сегодняшнее меню списком и с помощью кода ответят на три вопроса: сколько блюд, какое первое, какое последнее. Разница между sort() и sorted() и ошибка menu = menu.append(x) сводятся к одному: некоторые методы меняют объект и возвращают None. Нарисуй на доске схему с двумя именами и покажи её с помощью двух наклеек на одной коробке. В корейской программе по информатике для средней школы предусмотрены программы, обрабатывающие много значений в последовательной структуре вроде списка, поэтому здесь подойдёт небольшой проект подсчёта суммы оценок.
Главное
  • Список хранит значения по порядку: [a, b, c].
  • Индексы и срезы работают как в строках; последний индекс равен len - 1.
  • append, remove, pop и присваивание по индексу меняют сам список.
  • sorted() возвращает новый список; sort() меняет список и возвращает None.
  • При b = a список общий; для отдельной копии используй a.copy().
Источники курса (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Проверено: 2026-10-19