Два обозначенных вами подхода исходят с принципиально разных точек зрения. Первый подход, использующий индексирование и нарезку списков, - это способ Pythoni c работы с итерациями, такими как списки, строки, кортежи или генераторы. В этом случае данные сохраняются в виде строки ("alamin sheikh"
) и возвращаются в обратном порядке через [::-1]
. Из документации Python :
>>> L = range(10)
>>> L[::2] # every other element
[0, 2, 4, 6, 8]
>>> L[::-1] # reverse list
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> s='abcd'
>>> s[::2] # every other character
'ac'
>>> s[::-1] # reverse string
'dcba'
Второй подход использует структуру данных stack для хранения элементов. Интуитивно понятный способ понять стопки - это буквально представить стопку книг. Когда есть стопка книг, книги в верхней части стопки будут теми, которые были размещены последними; внизу будет книга, которая некоторое время лежала в стопке go. В терминах CS это называется LIFO или «Последний вошел, первый вышел».
Предоставленный исходный код - это Python реализация структуры данных стека, реализованная со списками. Поскольку ваш вопрос, кажется, конкретно касается того, как функция reverse_string
работает с экземпляром класса Stack
, я увеличу этот аспект.
Мы можем разобрать, что делает reverse_string
, как следует:
- Сохранить
input_str
в объекте stack
, переданном в качестве аргумента функции - Вставлять элементы из
stack
до тех пор, пока stack
не станет пустым
Давайте go рассмотрим пример с input_str = "alamin sheikh"
. Во-первых, в части кода for l oop мы перебираем входную строку и pu sh каждый символ в стеке. Когда мы закончим выталкивание, вот как будет выглядеть содержимое объекта stack
.
["a", "l", "a", "m", "i", "n", " ", "s", "h", "e", "i", "k", "h"]
Теперь мы переходим к шагу 2, где мы выталкиваем элементы из стека. Напомним, что стеки придерживаются структуры LIFO. В этом случае последний символ, "h"
, был последним элементом, помещенным в стек. Следовательно, это будет первый элемент, который выскочит из списка.
# after first pop
rev_str = "h"
["a", "l", "a", "m", "i", "n", " ", "s", "h", "e", "i", "k"]
Если мы продолжим эти шаги для остальных элементов в stack
, мы в конечном итоге получим перевернутую строку.