Здравствуйте. В этой статье я постараюсь расписать информацию по индексам срезам в Python. Попытаюсь расписать максимально понятно и наглядно. Надеюсь многим поможет эта статья для решения разных задач в ЕГЭ, а также просто для решения задач, где используются срезы. Рассмотрю, как применяются и используются индексы у следующих последовательностей: строки (str), списки (list) и кортежи (tuple).
Данную статью пишу в основном для своих учеников и для себя. Если вам она поможет, то буду благодарен за лайк.
Итак, начнем.
Индексы.
Индекс — это число, заключённое в квадратные скобки, которое мы ставим после составного объекта. Они позволяют обращаться к отдельным элементам последовательности по их позиции. По индексу обращаются к элементу коллекции.
Существует два вида индексации:
- прямая индексация;
- обратная индексация.
Прямая индексация.
В прямой индексации мы обращаемся к элементу в порядке позиции. Индекс представляет собой целое число, которое указывает на позицию элемента в последовательности. В Python нумерация индексов начинается с 0, то есть первый элемент имеет индекс 0, второй – 1, третий – 2 и так далее. Если нам нужен четвертый элемент, то нужно обратиться к третьему индексу.
Обратная индексация.
В обратной индексации мы обращаемся к элементу коллекции в обратном порядке и элементы нумеруются с конца и первый индекс с конца это -1.
Ошибка!
Если номер индекса в последовательности больше либо равен len(S), или меньше, чем -len(S), то при обращении к этому символу строки произойдет ошибка IndexError: string index out of range. Эта ошибка говорит о том, что мы вышли за пределы индексации.
Срезы.
Срез (slice) — извлечение из последовательности одного элемента или некоторого фрагмента (подстроки). Создать срез можно специальной командой, но обычно ей не пользуются (лишняя строка кода, я считаю). Возможно когда-то будет момент, что без нее будет не обойтись.
Важно помнить, что в срез попадают символы от первого указанного индекса (включительно) до второго (не включая его).
slice(start, stop[, step])
- start - начало среза
- stop - конец среза (и эта позиция не включается в срез)
- step - шаг с которым будет извлечен срез.
Её использование покажу ниже, а пока чуть подробнее о срезе, который используется с помощью квадратных скобок.
stroka = "Добро пожаловать в срезы!"
# получить первые 4 символа
print(stroka[:4])
Добро пожаловать в срезы!
# получить последние 4 символа
print(stroka[-4:]) # езы!
Добро пожаловать в срезы!
# получить все символы кроме 3 последних
print(stroka[:-3]) # Добро пожаловать в сре
Добро пожаловать в срезы!
# получить символы с 1 до 3 позиции включительно
print(stroka[1:4]) # обр
Добро пожаловать в срезы!
# получить символы от 3 с начала по -7 с конца (не включает)
print(stroka[3:-7]) # ро пожаловать в
Добро пожаловать в срезы!
# перевернуть строку
print(stroka[::-1]) # !ызерс в ьтаволажоп орбоД
Добро пожаловать в срезы!
# получить символы с конца до -10 в обратном порядке
print(stroka[:-10:-1]) # !ызерс в
Добро пожаловать в срезы!
# получить строку от начала и до -5 символа и перевернуть
print(stroka[-5::-1]) # рс в ьтаволажоп орбоД
Добро пожаловать в срезы!
# от начала до 6 индекса, каждый второй символ
print(stroka[:7:2]) # Дбоп
Добро пожаловать в срезы!
# с 3 до 11 позиции в обратном порядке
print(stroka[11:3:-1]) # олажоп о
Добро пожаловать в срезы!
# с -3 до -8 позиции каждый символ
print(stroka[-3:-8:-1]) # зерс_
Добро пожаловать в срезы!
# с -3 до -8 позиции каждый 2 символ
print(stroka[-3:-8:-2]) # зр_
Добро пожаловать в срезы!
# с 3 позиции по 10 не включительно каждый 2 символ
print(stroka[3:10:2]) # р_оа
Добро пожаловать в срезы!
# с начала каждый 4 символ
print(stroka[::4]) # Дожв р!
Добро пожаловать в срезы!
# с конца в начало, каждый 4 символ
print(stroka[::-4]) # !р вжоД
# Добро пожаловать в срезы!
Как работать со slice?
Аналогично будет работать со списками и кортежем, но там будет возвращать элементы, а не символы. Вот несколько примеров:
Важный момент: если ваш срез выходит за границы индексов, ошибки не будет.
Некоторые алгоритмы.
Из трех наших последовательностей мы можем изменить только список. Строка и кортеж являются неизменяемыми типами данных, поэтому их изменение невозможно, но есть обходной путь через создание новой переменной.
Получить первые или последние символы (элементы)
Добавить элемент спереди
Добавить элемент в конец
Вставить элемент в середину в четную длину.
Делать это будем через длину последовательности. Середина это половина длины.
Заменить середину в нечетной длине
Популярные срезы.
- [:] — копия последовательности.
- [1:] — все элементы за исключением первого.
- [:-1] — все элементы за исключением последнего.
- [::-1] — обратная последовательность.
- [1:-1] — все элементы за исключением последнего и первого.
- [1::2] — вывод нечетных элементов последовательности со второго.
- [::2] — вывод четных элементов последовательности с первого.
- [-2:0:-1] — обратный порядок всех элементов за исключением первого и последнего.
- [-2:0:-2] — обратный порядок каждого второго элемента за исключением первого и последнего.
Синтаксис срезов строк очень похож на синтаксис функции range().
Заключение.
Индексы и срезы играют ключевую роль при работе с данными в Python. Они обеспечивают гибкость и удобство при доступе и изменении элементов последовательностей. Понимание принципов работы с индексами является важным навыком для любого программиста на Python.
Срезы и индексы используются во многих задачах ЕГЭ. Но основными заданиями, где их используют - это задание 5, 24, 25.
Успехов всем в изучении, использовании индексов и срезов.
Весь курс подготовки к ЕГЭ с подробными описаниями и комментариями.
Лайки и комментарии приветствуются.