Добавить в корзинуПозвонить
Найти в Дзене

Почему в Python код string[::-1] перевернёт строку задом-наперёд?

Почему в Python код string[::-1] перевернёт строку задом-наперёд? И то же самое он сделает и со списком — почему так? Во-первых, это срез. Срез — это способ вытащить из строки или списка часть строки. Вот хотите вы получить третий элемент списка — пишете квадратные скобки и индекс 2, например, some_list[2]. То же самое можно со строкой. Но если нам нужно взять элементы с 3 по 6 индекс, и создать из них новый список или строку? Всё просто: words = ["python", "программирование", "алгоритм", "код", "функция", "список", "переменная", "цикл", "условие"] print(words[2:6]) или s = "программирование" print(s[2:6]) Этот код выдаст нам в новый список в первом случае, слова от «алгоритм» до «список». Со строкой он выдаст нам «огра». Потому что срезу создаёт новую строку или список, беря элементы от указанного индекса до указанного. Но! Сам последний индекс он не берёт при этом. [3:6] возьмёт элементы с индексами от 3 до 5. Логика общая для индексов, как range(1,6), который сгенерирует набор чисе

Почему в Python код string[::-1] перевернёт строку задом-наперёд? И то же самое он сделает и со списком — почему так?

Во-первых, это срез. Срез — это способ вытащить из строки или списка часть строки.

Вот хотите вы получить третий элемент списка — пишете квадратные скобки и индекс 2, например, some_list[2]. То же самое можно со строкой. Но если нам нужно взять элементы с 3 по 6 индекс, и создать из них новый список или строку? Всё просто:

words = ["python", "программирование", "алгоритм", "код", "функция", "список", "переменная", "цикл", "условие"]
print(words[2:6])

или

s = "программирование"
print(s[2:6])

Этот код выдаст нам в новый список в первом случае, слова от «алгоритм» до «список». Со строкой он выдаст нам «огра». Потому что срезу создаёт новую строку или список, беря элементы от указанного индекса до указанного. Но! Сам последний индекс он не берёт при этом. [3:6] возьмёт элементы с индексами от 3 до 5. Логика общая для индексов, как range(1,6), который сгенерирует набор чисел 1, 2, 3, 4, 5. Но не 6!

Но в примере выше есть ещё третье число среза, -1. Это — шаг. Этот код

s = "программирование"
print(s[2:6:2])

Выведет нам «ор». Он будет брать элементы с 2 по 5 индекс, но при этом каждый второй. То есть, возьмёт элемент под индексом 2, и после него будет брать через 1. Если мы напишем не 2, а 3, то будет каждый третий брать и т.д.

Но в нашем примере третье число в срезе -1. Что это значит? Это значит, что срез должен идти с конца.

s = "программирование"
print(s[6:2:-1])

Это нам вернёт не «огра», а «марг». Заметили, что 6 и 2 поменялись местами? Теперь срез собирается от конца к началу, с индекса 6 по 2, не беря 2 — то есть с 6 индекса по 3й. Так и нужно указывать. Это тоже история, похожая на числа в range(), логика оттуда же.

НО! Ещё момент. В примере выше вместо первых двух чисел в [] пусто. Что это значит? А значит это простую вещь

Такой код

s = "программирование"
print(s[:6])

Вернёт нам «програ». Пропуск числа слева от : означает, что нужно брать с начала. Если мы не будем указывать второе число, это будет означать, что нужно взять срез до последнего элемента:

s = "программирование"
print(s[2:])

Это напишет нам «ограммирование»

Ну и осталось что? Осталось убрать оба числа. И тогда просто создастся копия строки:

s = "программирование"
print(s[:])

Этот код выведет «программирование». А если мы поставим ещё третье число, шаг, -1, то тогда это будет значить, что нужно взять срез в обратном порядке. То есть с конца и до начала, так как индекс начала и конца пропущены. Поэтому этот код

s = "программирование"
print(s[::-1])

выведет «еинавориммаргорп»