Списки: создание, индексы, срезы

Списки: создание, индексы, срезы

До сих пор каждая переменная хранила одно значение: одно число, одну строку. Но программы часто работают с наборами данных: список оценок студента, набор имён пользователей, координаты точек. Для хранения последовательностей значений в Python используются списки (list).

Что такое список

Список — это упорядоченная изменяемая коллекция, которая может содержать элементы любых типов. Создаётся в квадратных скобках:

fruits = ["яблоко", "банан", "вишня"]
numbers = [1, 2, 3, 4, 5]
mixed = [42, "текст", 3.14, True, None]
empty = []   # пустой список

Список может хранить элементы разных типов в одном контейнере, хотя на практике лучше хранить однородные данные.

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

Несколько способов создать список:

# Литерал:
colors = ["красный", "зелёный", "синий"]

# Встроенная функция list():
chars = list("Python")   # ['P', 'y', 't', 'h', 'o', 'n']
nums = list(range(5))    # [0, 1, 2, 3, 4]

# Вложенный список (матрица):
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Длина списка: len()

fruits = ["яблоко", "банан", "вишня", "апельсин"]
print(len(fruits))   # 4
print(len([]))       # 0

Индексация

Элементы списка нумеруются с 0. Доступ по индексу — квадратные скобки:

fruits = ["яблоко", "банан", "вишня"]
#          0         1        2

print(fruits[0])    # яблоко
print(fruits[1])    # банан
print(fruits[2])    # вишня

Отрицательные индексы считают с конца:

#          яблоко  банан  вишня
#           -3      -2     -1

print(fruits[-1])   # вишня (последний)
print(fruits[-2])   # банан (предпоследний)

Обращение по несуществующему индексу вызовет IndexError:

# fruits[10]   # IndexError: list index out of range

Изменение элемента

Списки изменяемы — в отличие от строк, их элементы можно менять по индексу:

colors = ["красный", "зелёный", "синий"]
colors[1] = "жёлтый"
print(colors)   # ['красный', 'жёлтый', 'синий']

Срезы

Срезы работают так же, как для строк:

nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(nums[2:5])    # [2, 3, 4]
print(nums[:3])     # [0, 1, 2]
print(nums[7:])     # [7, 8, 9]
print(nums[::2])    # [0, 2, 4, 6, 8] — каждый второй
print(nums[::-1])   # [9, 8, 7, ..., 0] — список задом наперёд

Срез возвращает новый список. Исходный не изменяется.

Проверка вхождения: in

fruits = ["яблоко", "банан", "вишня"]

print("банан" in fruits)    # True
print("манго" in fruits)    # False
print("манго" not in fruits) # True

Перебор через for

scores = [85, 92, 78, 95, 88]

for score in scores:
    print(score)

# С индексом:
for i, score in enumerate(scores):
    print(f"[{i}] = {score}")

Вложенные списки

Список может содержать другие списки:

matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]

print(matrix[0])      # [1, 2, 3]
print(matrix[1][2])   # 6 — второй ряд, третий элемент

# Перебор матрицы:
for row in matrix:
    for elem in row:
        print(elem, end=" ")
    print()

Копирование списка

Обычное присваивание b = a не копирует список — обе переменные указывают на один и тот же объект:

a = [1, 2, 3]
b = a
b[0] = 99
print(a)   # [99, 2, 3] — изменился и a!

Для настоящей копии используйте срез [:] или list():

a = [1, 2, 3]
b = a[:]   # мелкая копия
b[0] = 99
print(a)   # [1, 2, 3] — не изменился

Проверь себя

Что выведет следующий код?

data = [10, 20, 30, 40, 50]
print(data[1:4])
print(data[-2:])
print(data[::-1])
  • data[1:4][20, 30, 40]
  • data[-2:][40, 50]
  • data[::-1][50, 40, 30, 20, 10]

Итог

  • Список (list) — упорядоченная изменяемая коллекция в квадратных скобках.
  • Индексы начинаются с 0; отрицательные индексы считают с конца.
  • Элементы изменяемы: lst[i] = значение.
  • Срезы lst[start:stop:step] возвращают новый список.
  • in / not in проверяют вхождение элемента.
  • b = a не копирует список — используйте b = a[:] для копии.

В следующем уроке познакомимся с методами списка: append, extend, insert, pop и remove — основными инструментами изменения списков.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике