W3docs

Доступ к элементам списка в 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"]

Используйте квадратные скобки [] для получения элемента по индексу:

python— editable, runs on the server

Обращение к несуществующему индексу вызывает ошибку 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"]
python— editable, runs on the server

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

Срезы списков

Срез извлекает подсписок с помощью синтаксиса list[start:stop]. Индекс start включается; индекс stop исключается.

python— editable, runs on the server

Срезы никогда не вызывают 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")) # 4

index() вызывает 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 lstTrue, если x присутствует
lst.index(x)Первый индекс x

Связанные главы

Практика

Практика
Which of the following ways can be used to access list items in Python?
Which of the following ways can be used to access list items in Python?
Was this page helpful?