- 6 августа 2025
- 7 минут
- 198
Python: Списки и основные операции работы со списками
Статью подготовили специалисты образовательного сервиса Zaochnik.
Методы создания и считывания списков (массивов)
Большая часть программ работает с не одним элементом, а с коллекцией переменных.
Приложение может управлять информацией об учениках класса, считывая список учащихся либо с клавиатуры, либо из файла, при этом изменение числа участников в классе не должно требовать редактирования исходного кода программы.
В случае обработки последовательностей, например, когда нужно было найти наибольший элемент не сохранялась вся последовательность в оперативной памяти. Тем не менее, во многих ситуациях требуется хранить всю последовательность, например, для вывода всех элементов в упорядоченном виде ("сортировка последовательности").
Для хранения таких данных можно применять структуру данных, известную в Python как список (в большинстве других языков используются термины "массив"). Список представляет собой последовательность элементов, индексы которых начинаются с 0, как и в строках. Создавать список можно, перечисляя его элементы в квадратных скобках, например:
python
List1 = [2, 3, 5, 7, 11, 13]
RainbowColors = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']
В списке List1 содержится 6 элементов, таких как:
python
List1[0] == 2, List1[1] == 3, List1[2] == 5, List1[3] == 7, List1[4] == 11, List1[5] == 13.
Список RainbowColors состоит из 7 строковых элементов.
Элементы списка, как и символы в строке, также могут индексироваться отрицательными числами, начиная с конца, например:
python
List1[-1] == 13, List1[-6] == 2.
Чтобы узнать длину списка, то есть количество его элементов, используют встроенную функцию len, например, `len(List1) == 6`.
Теперь рассмотрим различные методы создания и считывания списков.
Во-первых, можно создать пустой список (не содержащий элементы и имеющий длину 0) и добавлять элементы в него с помощью метода append.
Если программа получает на вход число элементов в списке n, а затем n элементов по одному в каждой строке, считывание списка можно выполнить следующим образом:
python
A = []
for i in range(int(input())):
A.append(int(input()))
В этом примере создается пустой список, далее считывается число элементов, после чего элементы добавляются в конец списка.
Определены также операции для работы со списками:
- конкатенация (суммирование двух списков) и
- повторение (умножение списка на число).
Например:
python
A = [1, 2, 3]
B = [4, 5]
C = A + B
D = B * 3
В результате список C станет равным `[1, 2, 3, 4, 5]`, а D будет равен `[4, 5, 4, 5, 4, 5]`. Это позволяет изменить способ считывания: сначала определить размер списка и создать его, а затем использовать цикл, начиная с 0, для считывания каждого элемента:
python
A = [0] * int(input())
for i in range(len(A)):
A[i] = int(input())
Вывести элементы списка A можно простой командой `print(A)`, что даст результат с квадратными скобками и запятыми между элементами. Такой вывод не всегда удобен; чаще нужно располагать все элементы в одной строке или по одному на каждой новой строке. Приведем два примера с различной организацией цикла:
python
for i in range(len(A)):
print(A[i])
В этом цикле индекс изменяется, после чего выводится элемент с текущим индексом.
python
for elem in A:
print(elem, end=' ')
Здесь элементы выводятся в одну строку, разделенные пробелами; цикл проходит по значениям (например, в случае `for elem in ['red', 'green', 'blue']` переменная elem принимает значения 'red', 'green', 'blue').
Срезы списков в Python
Список, как и строку, можно использовать для создания срезов:
python
ListA[i:j]
представляет собой срез из j-i элементов: ListA[i], ListA[i+1], …, ListA[j-1].
python
ListA[i:j:-1]
означает срез от i до j с изменением порядка: ListA[i], ListA[i-1], …, ListA[j+1].
python
ListA[i:j:k]
позволяет создать срез с шагом k: ListA[i], ListA[i+k], ListA[i+2*k],… . Если значение k<0, порядок элементов будет обратным.
При этом числа i или j могут быть опущены, что будет означать "начало списка" или "конец списка".
В отличие от строк, списки являются изменяемыми объектами: можно присваивать новое значение отдельным элементам списка или целым срезам.
Например:
python
ListA = [1, 2, 3, 4, 5]
A[2:4] = [7, 8, 9]
В результате получим список, в котором вместо двух элементов ListA[2:4] будет новый список из трех элементов. Теперь список равен `[1, 2, 7, 8, 9, 5]`.
python
ListA = [1, 2, 3, 4, 5, 6, 7]
ListA[::-2] = [10, 20, 30, 40]
Получим список `[40, 2, 30, 4, 20, 6, 10]`. Тут ListA[::-2] составляет список из элементов ListA[-1], ListA[-3], ListA[-5], ListA[-7], которым присваиваются значения 10, 20, 30, 40 соответственно.
Если вы попытаетесь присвоить новое значение непрерывному срезу (с шагом k, не равным 1), то количество старых и новых элементов должно совпадать, в противном случае возникнет ошибка ValueError.
Что касается непрерывных срезов, количество элементов может не совпадать, это позволяет добавлять или удалять элементы из середины списка. Хотя такая операция может занимать значительное время, если нужно переместить много элементов в памяти.
Обратите внимание, что ListA[i] — это операция обращения к отдельному элементу списка, а не к срезу!
Операции со списками в Python
- `x in A` — проверяет принадлежность элемента к списку. Возвращает True или False.
- `x not in A` — эквивалентно `not(x in A)`.
- `min(A)` — наименьший элемент списка.
- `max(A)` — наибольший элемент списка.
- `A.index(x)` — индекс первого вхождения элемента x; при отсутствии выбрасывает исключение ValueError.
- `A.count(x)` — количество вхождений элемента x в список.
- `A.sort()` — сортировка списка (изменяет сам список без возвращения значения).
- `sum(A)` — возвращает сумму всех элементов списка.
- `A.append(x)` — добавляет элемент x в конец списка.
- `A.extend(L)` — добавляет все элементы списка L в конец списка A.