Как разрезать список в Python (индексы, шаги и разворот)

Узнайте, как разрезать списки в Python, используя мощный синтаксис скобок. Основные аргументы запуска, остановки и шага, отрицательная индексация и реверсивные списки.

Попробуйте это решение в редакторе

Обзор

Нарезка — одна из самых интуитивно понятных и мощных функций Python, позволяющая извлекать подмножества списка, кортежа или строки с помощью чистого и лаконичного синтаксиса. Вместо написания многословных циклов для копирования определенных элементов из списка нотация фрагментов Python позволяет указать диапазон индексов внутри квадратных скобок.

Полный синтаксис для нарезки списка: my_list[start:stop:step]`. Индекс start является инклюзивным, индекс stop — исключительным, а Step определяет приращение между элементами (по умолчанию 1). Если вы опустите `start`, Python по умолчанию будет использовать начало списка. Если вы опустите `stop`, Python по умолчанию переместится в конец списка. Это делает извлечение частей коллекций весьма выразительным.

Нарезка также чрезвычайно универсальна, поскольку поддерживает отрицательные индексы. Отрицательный индекс начала или остановки отсчитывается в обратном направлении от конца списка (где «-1» представляет последний элемент). Установив отрицательное значение шага, например `my_list[::-1]`, вы можете быстро получить обратную копию списка. Понимание диапазонов срезов необходимо для четкого извлечения данных.

Код и вывод выполнения

Этот скрипт демонстрирует нарезку списка с использованием различных диапазонов начала, остановки, шага, отрицательной индексации и обращения списка.

numbers = [0, 10, 20, 30, 40, 50, 60, 70, 80]

# 1. Basic slicing: elements from index 2 up to (but excluding) 6
subset = numbers[2:6]
print("Subset [2:6]:", subset)

# 2. Omitting indices: start to index 4, and index 5 to end
first_five = numbers[:5]
last_four = numbers[5:]
print("First five [:5]:", first_five)
print("Last four [5:]:", last_four)

# 3. Using a step parameter: get every second element
every_second = numbers[::2]
print("Every second [::2]:", every_second)

# 4. Negative indexing: get the last three elements
last_three = numbers[-3:]
print("Last three [-3:]:", last_three)

# 5. Reverse the list using step=-1
reversed_numbers = numbers[::-1]
print("Reversed list [::-1]:", reversed_numbers)
Терминальный выход
Subset [2:6]: [20, 30, 40, 50]
First five [:5]: [0, 10, 20, 30, 40]
Last four [5:]: [50, 60, 70, 80]
Every second [::2]: [0, 20, 40, 60, 80]
Last three [-3:]: [60, 70, 80]
Reversed list [::-1]: [80, 70, 60, 50, 40, 30, 20, 10, 0]

Пошаговая реализация

  • Используйте list[start:stop] для извлечения элементов из индекса от начала до остановки (но не включая ее).
  • Опустите начальные или конечные индексы (например, list[:4] или list[4:]), чтобы отрезать от границы списка.
  • Передайте третий аргумент внутри скобки list[::step], чтобы пропускать элементы через равные промежутки времени.
  • Используйте отрицательные индексы для подсчета элементов в обратном направлении от конца коллекции.

Часто задаваемые вопросы

Изменяет ли нарезка исходный список?

Нет, срез списка возвращает неглубокую копию запрошенного диапазона, оставляя исходный список полностью неизменным.

Что произойдет, если индексы срезов выйдут за пределы?

В отличие от доступа к одному индексу, который вызывает ошибку IndexError, срез не допускает ошибок и просто ограничивает диапазон границами списка, возвращая пустой список, если ни один элемент не попадает в диапазон.

Связанные темы

Рекомендуемые ресурсы Python

Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.