Перейти к содержимому

Как делать срез в python

  • автор:

slice (срез)

Объект, представляющий набор индексов, а также метод (способ), используемый для представления некоторой части последовательности.

slice(stop) | slice(start, stop[, step])

start=None — Начальный индекс среза. Если не указан, используется индекс первого элемента «разрезаемого» объекта — `0`.

stop — Конечный индекс. Если не указан, используется индекс последнего элемента «разрезаемого» объекта.

step=None — Шаг выборки. Отрицательное значение позволяет строить срез из элементов в обратном порядке.

Объект среза обычно используется для представления той или иной части последовательности.
Объект представляет набор индексов, заданных диапазоном range(start, stop, step) .
Объект имеет атрибуты start , stop и step , соответствующие аргументам инициализатора.

Срез последовательности можно создать при помощи расширенного синтаксиса индексирования — квадратных скобок [] с двоеточиями в качестве разделителей внутри. Например: list_[start:stop:step] .

На заметку

Многие привыкли понимать слова «взять срез», как «применить объект среза к последовательности», а не просто, как «создать объект среза», поэтому «срезом» в данной стратье мы называем и способ (действие над последовательностью), и сам объект.

# «Берём срез строки» или
# «Создаем объект среза и применяем к строке»
'самоходка'[4:1:-1] # 'хом'

slice_ = slice(2, 4)
slice_.start # 2
slice_.stop # 4
slice_.step # None

list_ = [5, 6, 7, 8, 9]

list_[slice_]
list_[2:4]
# [7, 8]

list_[slice(1, None)]
list_[1:]
# [6, 7, 8, 9]

list_[slice(None, -1)]
list_[:-1]
# [5, 6, 7, 8]

list_[slice(None, None, 2)]
list_[::2]
# [5, 7, 9]

list_[slice(None)]
list_[::]
# [5, 6, 7, 8, 9]

list_[slice(2)]
list_[:2:]
# [5, 6]

list_[slice(None, None, -1)]
list_[::-1]
# [9, 8, 7, 6, 5]

Индексы и срезы

Python 3 логотип

Сегодня мы поговорим об операциях взятия индекса и среза.

Взятие элемента по индексу

Как и в других языках программирования, взятие по индексу:

  File 

Как и во многих других языках, нумерация элементов начинается с нуля. При попытке доступа к несуществующему индексу возникает исключение IndexError.

В данном примере переменная a являлась списком, однако взять элемент по индексу можно и у других типов: строк, кортежей.

В Python также поддерживаются отрицательные индексы, при этом нумерация идёт с конца, например:

  File 

Срезы

В Python, кроме индексов, существуют ещё и срезы.

item[START:STOP:STEP] — берёт срез от номера START, до STOP (не включая его), с шагом STEP. По умолчанию START = 0, STOP = длине объекта, STEP = 1. Соответственно, какие-нибудь (а возможно, и все) параметры могут быть опущены.

Также все эти параметры могут быть и отрицательными:

       В последнем примере получился пустой список, так как START < STOP, а STEP отрицательный. То же самое произойдёт, если диапазон значений окажется за пределами объекта:
 

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Python: Срезы строк

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

Подстрока — это некоторая часть строки, которую нужно найти и извлечь.

Представим, что у нас есть дата в таком формате: 12-08-2034. Нам нужно извлечь из нее подстроку, в которую входит только год.

Если подумать логически, то нужно посчитать индекс символа, с которого начинается год, и затем извлечь четыре символа. Индексы в строке начинаются с нуля, значит, первый символ года доступен по индексу 6, а последний символ — по индексу 9. Проверим:

value = '12-08-2034' print(value[6]) # => 2 print(value[9]) # => 4 

Зная эти индексы, мы можем воспользоваться срезами и получить нужную подстроку:

value = '12-08-2034' year = value[6:10] print(year) # => 2034 

Срезы для строк в Python — это механизм, с помощью которого извлекается подстрока по указанным параметрам. В примере выше мы взяли подстроку с 6 индекса по 10 индекс, не включая, то есть с 6 по 9 включительно. Формула выглядит так:

str[начальный индекс:конечный индекс] # Пара примеров value = '01-12-9873' # Срез строки это всегда строка, # даже если внутри строки было число. value[1:2] # '1' value[3:5] # '12' 

Срезы — механизм с большим количеством вариаций. Например, если не указать вторую границу, то извлечение произойдет до конца строки. То же самое с первой границей — началом строки:

value = 'Hexlet' value[3:] # 'let' value[:3] # 'Hex' 

Можно указать даже отрицательные индексы. В таком случае отсчет идет с обратной стороны:

value = 'Hexlet' # Правая граница отрицательная. Считаем -1 от конца строки value[3:-1] # 'le' # Левая граница отрицательная. Считаем -5 от конца строки value[-5:3] # 'ex' 

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

У срезов есть третий необязательный параметр — шаг извлечения. По умолчанию он равен единице, но мы можем его изменить:

value = 'Hexlet' value[1:5:2] # el # 1:5 это 'exle' # шаг 2 это каждый второй, то есть 'e' и 'l' 

Все это можно комбинировать с открытыми границами, то есть без указания начала или конца:

value = 'Hexlet' value[:5:2] # 'Hxe' value[1::2] # 'elt' 

Шаг может быть отрицательным, в таком случае он берется с конца. Из этого вытекает самый популярный способ использования шага — переворот строки:

value = 'Hexlet' # Пропускаем обе границы value[::-1] # 'telxeH' 

Если используется отрицательный шаг, и элементы среза извлекаются в обратном порядке — тогда и границы среза тоже нужно указывать в обратном порядке. Первой указывается правая граница среза, второй — левая:

value = 'Hexlet' # Символ с индексом 1 не будет включен в подстроку value[4:1:-1] # 'elx' 

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

value = 'Hexlet' start = 1 end = 5 value[start:end] # 'exle' 

Соберем все вместе:

value = 'Hexlet' value[::] = 'Hexlet' # Вся строка value[:] = 'Hexlet' # Вся строка value[::2] = 'Hxe' # Четные по порядку символы value[1::2] = 'elt' # Нечетные по порядку символы value[::-1] = 'telxeH' # Вся строка в обратном порядке value[5:] = 't' # Строка, начиная с шестого символа value[:5] = 'Hexle' # Строка до шестого символа value[-2:1:-1] = 'elx' # Все символы с предпоследнего до третьего в обратном порядке. Во всех случаях выборки от большего индекса к меньшему нужно указывать шаг 

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

Задание

В переменной value лежит значение Hexlet . Извлеките из него и выведите на экран срез, который получит подстроку xle . Это задание можно сделать разными способами.

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

  • Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

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

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

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

Полезное

Определения

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

Срез списка в Python

У интернет-магазина есть список товаров. Отобразить их все на одной странице трудно: товаров очень много, и разумнее их разбить по страницам. Будем показывать первые десять товаров на первой, второй десяток — на второй, и так далее.

Срезы вручную

Итак, есть длинный список товаров:

products = [ 'зубные щетки', 'расчески', 'заколки', 'бигуди для волос', 'парики', 'шиньоны', 'ткани', 'ленты', 'тесьма', 'кружево', 'провода', 'шнуры', 'кабели', 'линолеум', 'пленка', 'ковровые покрытия', 'мебельные гарнитуры', 'автомобили', 'мотовелотовары', 'прицепы', 'книги', 'брошюры', 'альбомы', 'картографические издания', 'нотные издания', 'листовые изоиздания', 'календари', 'буклеты', ] 

Чтобы разбить его по страницам, будем использовать срезы. Срезы позволяют взять часть списка. Получается новый список, состоящий из элементов существующего:

products = [ 'зубные щетки', 'расчески', 'заколки', 'бигуди для волос', 'парики', 'шиньоны', 'ткани', 'ленты', 'тесьма', 'кружево', 'провода', 'шнуры', 'кабели', 'линолеум', 'пленка', 'ковровые покрытия', 'мебельные гарнитуры', 'автомобили', 'мотовелотовары', 'прицепы', 'книги', 'брошюры', 'альбомы', 'картографические издания', 'нотные издания', 'листовые изоиздания', 'календари', 'буклеты', ] # "срезаем" первые десять элементов first_page = products[:10] # начинаем с элемента с индексом 10, заканчиваем элементом с индексом 19 second_page = products[10:20] # "-10" означает "десятый с конца" last_page = products[-10:] 

Попробуйте взять третью страницу, поместив её в переменную third_page :

Срезы в цикле

Конечно, при решении задач не стоит заводить переменные first_page , second_page и т.д. В таких случаях следует заводить список. Назовём его pages .

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

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar