Доступ к элементам списка в Python
Как обращаться к элементам списка Python с помощью положительных и отрицательных индексов, срезов со шагом, вложенных списков и метода index().
Python список — это упорядоченная изменяемая последовательность, которая может содержать элементы любого типа. Поскольку списки упорядочены, каждый элемент имеет фиксированную числовую позицию — индекс — которую можно использовать для чтения, обновления или получения среза данных.
В этой главе рассматриваются:
- Положительная и отрицательная индексация
- Срезы (start, stop, step)
- Проверка принадлежности с помощью
in - Поиск позиции с помощью
index() - Доступ к элементам вложенных списков
Об изменении списков читайте в разделах Change List Items, Add List Items и Remove List Items.
Положительная индексация
Python использует индексацию с нуля: первый элемент находится по индексу 0, второй — по индексу 1 и так далее.
Index: 0 1 2 3 4
↓ ↓ ↓ ↓ ↓
fruits = ["apple","banana","cherry","durian","elderberry"]Используйте квадратные скобки [] для получения элемента по индексу:
Обращение к несуществующему индексу вызывает ошибку IndexError:
fruits = ["apple", "banana", "cherry"]
print(fruits[10]) # IndexError: list index out of rangeВсегда проверяйте len(list) - 1, чтобы найти допустимую верхнюю границу, или используйте блок try/except, если длина списка неизвестна.
Отрицательная индексация
Отрицательные индексы отсчитываются с конца списка. Индекс -1 — это последний элемент, -2 — предпоследний и так далее.
Index: -5 -4 -3 -2 -1
↓ ↓ ↓ ↓ ↓
fruits = ["apple","banana","cherry","durian","elderberry"]Отрицательная индексация особенно полезна, когда нужно получить последний элемент списка с неизвестной длиной.
Срезы списков
Срез извлекает подсписок с помощью синтаксиса list[start:stop]. Индекс start включается; индекс stop исключается.
Срезы никогда не вызывают IndexError — Python автоматически ограничивает вышедшие за пределы границы:
fruits = ["apple", "banana", "cherry"]
print(fruits[1:100]) # ['banana', 'cherry'] — no errorСрезы с шагом
Третий параметр — шаг — определяет, сколько элементов пропускать между каждым выбором: list[start:stop:step].
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[0:9:2]) # [0, 2, 4, 6, 8] — every second item
print(numbers[::3]) # [0, 3, 6, 9] — every third item
print(numbers[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] — reversedОтрицательный шаг меняет направление, поэтому list[::-1] — это идиоматический способ перевернуть список без изменения оригинала.
Срезы с отрицательными индексами
Отрицательные индексы также работают в срезах:
fruits = ["apple", "banana", "cherry", "durian", "elderberry"]
print(fruits[-3:]) # ['cherry', 'durian', 'elderberry'] — last 3
print(fruits[-4:-1]) # ['banana', 'cherry', 'durian']Проверка наличия элемента
Используйте оператор in для проверки принадлежности без знания индекса:
fruits = ["apple", "banana", "cherry", "durian", "elderberry"]
print("banana" in fruits) # True
print("mango" in fruits) # False
print("mango" not in fruits) # TrueЭто чище, чем ручной перебор, и является предпочтительным способом проверки наличия элемента.
Поиск индекса элемента
Метод index() возвращает позицию первого вхождения значения:
fruits = ["apple", "banana", "cherry", "banana", "elderberry"]
print(fruits.index("banana")) # 1 — first occurrence
print(fruits.index("elderberry")) # 4index() вызывает ValueError, если значение не найдено. Используйте in для предварительной проверки:
fruits = ["apple", "banana", "cherry"]
target = "mango"
if target in fruits:
print(fruits.index(target))
else:
print(f"{target!r} is not in the list")Можно также ограничить поиск диапазоном с помощью index(value, start, stop):
fruits = ["apple", "banana", "cherry", "banana", "elderberry"]
# Find 'banana' starting from index 2 (skips the first occurrence)
print(fruits.index("banana", 2)) # 3Доступ к элементам вложенных списков
Список может содержать другие списки в качестве элементов. Доступ к вложенным элементам осуществляется через цепочку квадратных скобок:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
print(matrix[0]) # [1, 2, 3] — first row
print(matrix[1][2]) # 6 — row 1, column 2
print(matrix[-1][-1]) # 9 — last row, last columnТот же синтаксис срезов применяется и к вложенным спискам:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix[0][1:]) # [2, 3]Краткий справочник
| Синтаксис | Описание |
|---|---|
lst[i] | Элемент по индексу i (начиная с 0) |
lst[-i] | Элемент на позиции i с конца |
lst[a:b] | Срез от a (включительно) до b (исключительно) |
lst[a:b:s] | Срез с шагом s |
lst[::-1] | Перевёрнутая копия списка |
x in lst | True, если x присутствует |
lst.index(x) | Первый индекс x |
Связанные главы
- Python Lists — создание, свойства и обзор списков
- Change List Items — обновление значений по индексу
- Add List Items —
append(),insert(),extend() - Remove List Items —
remove(),pop(),del - Loop Lists — перебор всех элементов
- List Methods — полный справочник методов
- List Comprehension — компактное создание списков