← Назад к вопросам

Сколько может быть чисел в срезе (slice)?

2.7 Senior🔥 151 комментариев
#DevOps и инфраструктура#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Числа в срезе (slice) Python

Базовая структура среза

Срез (slice) в Python имеет следующую синтаксис:

sequence[start:stop:step]

Таким образом, в срезе может быть максимум 3 числа:

  1. start — индекс начала (включительно)
  2. stop — индекс конца (исключительно)
  3. step — шаг (по умолчанию 1)
list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Одно число
list[5]      # 5 (конкретный элемент, не срез)

# Два числа (start и stop)
list[2:7]    # [2, 3, 4, 5, 6]

# Три числа (start, stop, step)
list[1:8:2]  # [1, 3, 5, 7]

# Все три с явным указанием
list[0:10:1] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Опущенные параметры

Любой из трёх параметров может быть опущен, что означает использование значений по умолчанию:

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

# start по умолчанию = 0
list[:5]     # [0, 1, 2, 3, 4]

# stop по умолчанию = длина последовательности
list[3:]     # [3, 4, 5, 6, 7, 8, 9]

# step по умолчанию = 1
list[::2]    # [0, 2, 4, 6, 8]

# Все опущены
list[:]      # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] (копия списка)
list[::]     # То же самое

Отрицательные индексы

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

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

# Отрицательные индексы с конца
list[-1]     # 9 (последний элемент)
list[-3:]    # [7, 8, 9] (последние 3 элемента)
list[:-3]    # [0, 1, 2, 3, 4, 5, 6] (все кроме последних 3)
list[-5:-2]  # [5, 6, 7]

Отрицательный шаг (reverse)

Отрицательный step позволяет идти в обратном направлении:

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

# Полный реверс
list[::-1]   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

# Реверс с шагом -2
list[::-2]   # [9, 7, 5, 3, 1]

# Реверс от индекса 7 до 2
list[7:2:-1] # [7, 6, 5, 4, 3]

# От конца до начала с шагом -3
list[-1::-3] # [9, 6, 3, 0]

Срезы со строками

Строки тоже поддерживают срезы (как и кортежи, списки):

text = "Hello, World!"

text[0:5]    # "Hello"
text[7:12]   # "World"
text[::-1]   # "!dlroW ,olleH" (реверс)
text[::2]    # "Hlowrd" (каждый второй символ)

Объект slice()

Внутри Python срез представляется объектом slice:

s = slice(2, 7, 1)  # Эквивалентно [2:7:1]
list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list[s]              # [2, 3, 4, 5, 6]

# Доступ к параметрам
print(s.start)       # 2
print(s.stop)        # 7
print(s.step)        # 1

Это полезно, когда нужно динамически создавать срезы:

def get_slice(start=None, stop=None, step=None):
    return slice(start, stop, step)

my_slice = get_slice(1, 8, 2)
list = range(10)
print(list[my_slice])  # [1, 3, 5, 7]

Срезы в многомерных структурах

В numpy, pandas и других библиотеках для многомерных данных можно использовать несколько срезов:

import numpy as np

array = np.arange(20).reshape(4, 5)
# [[0, 1, 2, 3, 4],
#  [5, 6, 7, 8, 9],
#  [10, 11, 12, 13, 14],
#  [15, 16, 17, 18, 19]]

# Но это НЕСКОЛЬКО срезов через запятую, а не один
array[1:3, 2:4]  # Строки 1-2, столбцы 2-3

При этом каждый срез по-прежнему содержит максимум 3 параметра.

Особенности и граничные случаи

list = [0, 1, 2, 3, 4]

# Если start >= stop и step > 0
list[5:2]        # [] (пустой список)

# Если индексы выходят за границы
list[0:100]      # [0, 1, 2, 3, 4] (до конца)
list[-100:-1]    # [0, 1, 2, 3] (с начала)

# Шаг не может быть 0
list[::0]        # ValueError: slice step cannot be zero

Вывод

В срезе может быть максимум 3 параметра:

  • start — начало (по умолчанию None/0)
  • stop — конец (по умолчанию None/длина)
  • step — шаг (по умолчанию 1)

Любой из них может быть опущен, опущен, задан отрицательным значением. Это делает срезы Python одним из самых мощных инструментов для работы с последовательностями.