Перейти к содержанию
Educora
Средний17 мин6 / 42

Списки

Храни много значений в одном списке: обращайся к элементам, добавляй, удаляй, сортируй и перебирай их в цикле.

Проверь себя
В этом уроке ты узнаешь
  • Создавать список и обращаться к его элементам по индексу
  • Пользоваться методами append, insert, remove, pop и sort
  • Перебирать список в цикле и считать результаты с помощью sum, min, max

В классе 25 учеников, и нужно запомнить оценку каждого. 25 отдельных переменных — grade1, grade2, grade3…? Это утомительно и неудобно. В Python вместо этого все оценки можно хранить в одном списке — сколько угодно элементов под одним именем.

Создание списка

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

Упорядоченный набор значений в квадратных скобках [], разделённых запятыми. Элементы могут быть любого типа, а сам список можно изменять после создания.

Индексы и срезы в списках работают так же, как в строках: первый элемент — [0], последний — [-1], а len() возвращает количество элементов.

Python
fruits = ['apple', 'pomegranate', 'fig', 'grape']
print(fruits)
print(len(fruits))
print(fruits[0], fruits[-1])
print(fruits[1:3])
print('fig' in fruits)
▸ Ожидаемый результат
['apple', 'pomegranate', 'fig', 'grape']
4
apple grape
['pomegranate', 'fig']
True

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

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

МетодЧто делает
append(x)добавляет x в конец списка
insert(i, x)вставляет x на позицию i
remove(x)удаляет первый элемент, равный x
pop()удаляет последний элемент и возвращает его
sort()сортирует список по возрастанию
count(x)считает, сколько раз встречается x
Python
cart = ['bread', 'milk']
cart.append('cheese')
cart.insert(0, 'tea')
print(cart)

cart.remove('milk')
last = cart.pop()
print('Removed:', last)

cart[0] = 'green tea'
print(cart)
▸ Ожидаемый результат
['tea', 'bread', 'milk', 'cheese']
Removed: cheese
['green tea', 'bread']

Списки и циклы

Списки и цикл for созданы друг для друга. Для расчётов есть и готовые функции: sum() даёт сумму, а min() и max() — наименьший и наибольший элементы. Айсель считает средний балл своих оценок за четверть:

Python
grades = [5, 4, 5, 3, 4, 5]
average = sum(grades) / len(grades)
print('Grades:', grades)
print('Max:', max(grades), 'Min:', min(grades))
print(f'Average: {average:.2f}')
print('Number of fives:', grades.count(5))
▸ Ожидаемый результат
Grades: [5, 4, 5, 3, 4, 5]
Max: 5 Min: 3
Average: 4.33
Number of fives: 3

Цикл удобен и для того, чтобы построить новый список из старого: создаём пустой список [] и добавляем в него через append подходящие элементы.

Python
scores = [45, 82, 67, 90, 38]
passed = []
for s in scores:
    if s >= 50:
        passed.append(s)
print(passed)
print(len(passed), 'of', len(scores), 'passed')
▸ Ожидаемый результат
[82, 67, 90]
3 of 5 passed

Сортировка, split и join

Метод sort() меняет сам список, а функция sorted() возвращает новый отсортированный список и не трогает старый. reverse=True даёт порядок по убыванию.

Python
numbers = [42, 7, 19, 3]
print(sorted(numbers))
print(numbers)
numbers.sort(reverse=True)
print(numbers)
▸ Ожидаемый результат
[3, 7, 19, 42]
[42, 7, 19, 3]
[42, 19, 7, 3]
Интерактив
Загрузка симуляции…
Как работает сортировка? Метод sort() в Python использует более быстрый и хитрый алгоритм, но идея та же: элементы сравниваются и меняются местами.

Мостом между строками и списками служат два метода: split() разбивает строку на слова и возвращает список, а join() склеивает элементы списка в одну строку.

Python
line = 'Baku Ganja Sumgait Lankaran'
cities = line.split()
print(cities)
print(len(cities))
print(' - '.join(cities))
▸ Ожидаемый результат
['Baku', 'Ganja', 'Sumgait', 'Lankaran']
4
Baku - Ganja - Sumgait - Lankaran
Python
a = [1, 2, 3]
b = a
b.append(4)
print(a)

c = a.copy()
c.append(5)
print(a, c)
▸ Ожидаемый результат
[1, 2, 3, 4]
[1, 2, 3, 4] [1, 2, 3, 4, 5]
Задание

Выведи самый высокий балл, самый низкий балл и сумму всех баллов — каждое на отдельной строке. Используй max(), min() и sum().

Задание · Python
scores = [72, 95, 88, 61, 90]
# 1) the highest score
# 2) the lowest score
# 3) the sum of all scores
▸ Ожидаемый результат
95
61
406
Задание

В списке temps — температуры за неделю. С помощью цикла и append построй новый список hot из температур выше 25°, отсортируй его по убыванию и выведи. Затем выведи количество жарких дней.

Задание · Python
temps = [22, 31, 27, 19, 33, 25, 29]
hot = []
# 1) append every temperature above 25 to hot
# 2) sort hot from highest to lowest and print it
# 3) print how many hot days there were
▸ Ожидаемый результат
[33, 31, 29, 27]
4

Главное

  • Список — упорядоченный изменяемый набор значений в [].
  • Индексы начинаются с 0; несуществующий индекс вызывает IndexError.
  • append, insert, remove, pop изменяют список; sum, min, max, len помогают в расчётах.
  • sort() сортирует сам список, sorted() возвращает новый.
  • split() превращает строку в список, join() — список в строку.

Проверь себя

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

1 / 10
Если nums = [10, 20, 30], чему равно nums[1]?