6 способів перевернути рядок у Python
Перевертання рядка – це поширене завдання, яке може зустрітися під час роботи з текстовими даними на Python. У цій статті ми розглянемо різні методи перевертання рядків, супроводжуючи кожен із них прикладами коду.
1. Використання індексації з кроком
Один із найпростіших і найшвидших способів перевернути рядок – використовувати індексацію з кроком. У рядках Python є послідовності символів, і ми можемо звернутися до них за допомогою індексів. Приклад:
s = "Hello, World!" reversed_s = s[::-1] print(reversed_s) # Висновок: "!dlroW ,olleH"
В даному випадку s[::-1] означає «почати з останнього символу та йти до першого з кроком -1».
2. Використання функції reversed() та методу join()
Функція reversed() дозволяє створити зворотний ітератор будь-якої послідовності. Однак, оскільки reversed() повертає ітератор, а не рядок, нам необхідно використовувати метод join() для перетворення ітератора назад у рядок.
s = "Hello, World!" reversed_s = ''.join(reversed(s)) print(reversed_s) # Висновок: "!dlroW ,olleH"
3. Використання циклу for
Ми також можемо використовувати цикл для створення нового рядка, додаючи символи з вихідного рядка у зворотному порядку.
s = "Hello, World!" reversed_s = "" for char in s: reversed_s = char + reversed_s print(reversed_s) # Висновок: "!dlroW ,olleH"
Цей метод може бути повільнішим, ніж індексація з кроком або функція reversed() , особливо для великих рядків.
4. Використання рекурсії
Рекурсія – це спосіб, у якому функція викликає себе. Ми можемо використовувати рекурсію для перевертання рядка, хоча це не найоптимальніший спосіб.
def reverse_string(s): if len(s) == 0: return s else: return reverse_string(s[1:]) + s[0] s = "Hello, World!" reversed_s = reverse_string(s) print(reversed_s) # Висновок: "!dlroW ,olleH"
Зауважте, що цей метод може призвести до переповнення стека викликів для дуже великих рядків.
5. Використання генераторів списків
Генератори списків – це компактний спосіб створення списків на основі існуючих колекцій. У цьому випадку ми можемо використовувати їх для створення списку символів рядка у зворотному порядку, а потім використовувати метод join() для перетворення списку назад у рядок.
s = "Hello, World!" reversed_s = ''.join([s[i] for i in range(len(s)-1, -1, -1)]) print(reversed_s) # Висновок: "!dlroW ,olleH"
6. Використання стека
Стек - це структура даних, заснована на принципі "останній увійшов, перший вийшов" (LIFO). Ми можемо використовувати стек для зберігання символів рядка та виймання їх у зворотному порядку.
def reverse_string(s): stack = list(s) reversed_s = "" while stack: reversed_s += stack.pop() return reversed_s s = "Hello, World!" reversed_s = reverse_string(s) print(reversed_s) # Висновок: "!dlroW ,olleH"
Висновок
У цій статті ми розглянули різні методи перевертання рядків на Python і навели приклади коду для кожного з них. Залежно від конкретного завдання та переваг, можна вибрати найбільш підходящий метод для роботи з рядками.
Кожен із представлених методів має свої переваги та недоліки. Індексація з кроком є простим та швидким способом, але може бути незрозумілим для новачків. Функція reversed() та метод join() пропонують трохи більш ясний підхід, але можуть бути менш ефективними. Цикл for та стек є інтуїтивно зрозумілими, але можуть бути повільними для великих рядків.Рекурсія та генератори списків надають альтернативні підходи, але можуть бути непрактичними для деяких завдань.
Вибираючи відповідний метод, варто враховувати характеристики вихідних даних, а також особисті переваги та досвід роботи з Python.
5 способів перевернути рядок у Python 3
Створимо функцію reversed1 з аргументом variable , де variable - змінна, що зберігає рядок, який хочемо перевернути. Оскільки рядок є незмінним об'єктом, то створимо окрему поки що порожню змінну res , яка в майбутньому зберігатиме результат.
def reversed1(variable): res=''
У функцію помістимо цикл, який "проходжуватиметься" по кожному з елементів рядка. Почнемо з кінця рядка, використовуючи позитивні індекси, відповідно параметр start функції range - len(variable)-1 . -1 тому, що довжина рядка завжди на 1 більша, ніж індекс останнього її елемента. Закінчити ми повинні на першому символі рядка, тому параметр stop функції range() - -1, оскільки перераховуються числа до значення цього параметра не включно. Параметр step - -1, тому що ми рахуємо у зворотному порядку.
def reversed1(variable): res='' for i in range(len(variable)-1,-1,-1): pass
Тепер заповнимо тіло циклу - проведемо конкатенацію між старим значенням res та елементом рядка з індексом i. Таким чином, за кожної ітерації циклу ми додаємо по одному символу до результату. Після закінчення циклу повернемо результат.
def reversed1(variable): res='' for i in range(len(variable)-1,-1,-1): res+=variable[i] return res n = reversed1(input()) print(n)
2. Використання циклу зі списком у результаті
Цей спосіб аналогічний попередньому, єдина його відмінність полягає у типі даних змінної res – тут вона є списком.
Замість конкатенації можна використовувати метод append() , за допомогою якого ми додаємо елемент, вказаний аргументом до методу, в кінець списку. Отже, ми отримали:
def reversed2(variable): res=[] for i in range(len(variable)-1,-1,-1): res.append(variable[i]) return res
Функція поки що повертає список, який складається з односимвольних елементів. Якщо нас це не влаштовує, то чому б не перетворити список у рядок за допомогою методу join()? Зробимо це, додавши конструкцію res=''.join(res).
def reversed1(variable): res=[] for i in range(len(variable)-1,-1,-1): res.append(variable[i]) res=''.join(res) return res n = reversed1(input()) print(n)
3. Рекурсія
Третій у нашому огляді спосіб – рекурсія, як завжди важка для розуміння. Як завжди створюємо функцію, але не поспішаємо поміщати туди цикл.
Почну пояснення з кінця. Якщо ми записали в результат усі символи крім першого, то довжина рядка, що залишилася, дорівнює одиниці і, отже, її потрібно повернути. Отримуємо:
def reversed3(variable): if len(variable) == 1: return variable
Але якщо довжина рядка більше одного, потрібно повернути останній з її елементів і викликати цю ж функцію, але вже відрізавши останній символ. Зробити це можемо з допомогою зрізу variable[:-1] . Обновимо картину:
def reversed3(variable): if len(variable) == 1: return variable else: return variable[-1] + reversed3(variable[:-1])
Використання else: тут необов'язково, оскільки після повернення чогось цією функцією вона завершиться. Тому конструкцію return variable[-1] + reverse3(variable[:-1]) можна помістити безпосередньо в тіло функції. Кінцевий варіант вирішення:
def reversed3(variable): if len(variable) == 1: return variable return variable[-1] + reversed3(variable[:-1]) n = reversed3(input()) print(n)
4. Використання вбудованої функції
У Python 3 вбудовано спеціальну функцію reversed() , як аргумент вона приймає список або рядок, а повертає ітератор послідовності значень, що складається з усіх елементів аргументу у зворотному порядку.
Простими словами - недостатньо написати res = reversed(variable) , дані потрібно перетворити на потрібний тип (у разі - в рядок) Зробити ми можемо з допомогою методу join() , з'єднавши послідовність через порожній рядок. Код:
def reversed4(variable): res=''.join(reversed(variable)) return res n = reversed4(input()) print(n)
5. Зріз рядка
Можете уявити спосіб перевернути рядок, який був би коротшим за назву функції? можу!
Зріз рядка - річ прекрасна, але часом лякає новачків "ущільненим" синтаксисом. Зріз містить три параметри - [start:stop:step], аналогічно функції range() .
Для способу з використанням зрізів не потрібно навіть створювати функцію, тільки даремно рядки і час витратите.
Звичайно, ніякої магії тут немає, ми просто перебираємо символи з кроком -1, тобто у зворотному порядку.
Висновок
Перший і другий способи якнайкраще підходять, якщо під час перевороту рядки потрібно її змінювати. При цьому вони значно поступаються 4 і 5 способам у швидкості.
Щодо третього способу багато сказати не можу, оскільки не можу вигадати йому застосування. Такий спосіб погано читається і досить повільний, тому я не рекомендую його використовувати.
Четвертий спосіб досить швидкий, добре читається і підходить у багатьох випадках.
П'ятий спосіб - найшвидший, добре читається, дуже короткий (6 символів), тому його я вважаю найкращим.
Порівняльну таблицю швидкості деяких способів можна знайти за посиланням - https://python-scripts.com/reversed
Якщо знаєте щось ще з цієї теми, хочете мене поправити або дати ідею - пишіть у коментарях, я все прочитаю і візьму до уваги. Успіхів!
Функція reversed() в Python розгортає послідовність
Повертає елементи послідовності у зворотному порядку
Синтаксис:
Параметри:
Значення, що повертається:
Опис:
Функція reversed() повертає зворотний ітератор, тобто повертає ітератор, який перебирає елементи оригіналу у зворотному порядку.
Функція reversed() не створює копію та не змінює оригінал послідовності.
Об'єкт seq повинен мати метод __reversed__() або підтримує протокол послідовності, це метод __len__() і метод __getitem__() з цілими аргументами, що починаються з 0 .
Приклади реверсу різних послідовностей.
Перевернемо список (реверс списку):
>>>
x
=
[15,
11,
13,
12,
14,
10]
>>>
x
=list(reversed(x))
>>>
x
# [10, 14, 12, 13, 11, 15]
# тепер у зворотний бік
>>>
[i
for
i
in
reversed(x)]
# [15, 13, 14, 11, 12, 10]
Перевернемо рядок (реверс рядка) за допомогою reversed() :
Так як рядок є окремим випадком кортежу, а функція reversed() повертає ітератор оригіналу послідовності, то вихідний рядок перетворювати на список (кортеж) не обов'язково.
x
=
'forest'
for
i
in
reversed(x):
# виведення символів рядка 'x'
# по одному у зворотному порядку
print(i,
end='')
print('\n'
+
'-'*len(x))
print(x)
# tserof
# ------
# forest
Якщо в результаті потрібно знову отримати рядок, тільки перевернутий (запишемо коротше):
>>>
x
=
'Абракадабра'
>>>
line
=
''.join(reversed(x))
>>>
line
# 'арбадакарба'
- ОГЛЯДНА СТОРІНКА РОЗДІЛУ
- Функція abs(), абсолютне значення числа
- Функція all(), усі елементи True
- Функція any(), хоча один елемент True
- Функція ascii(), перетворює рядок на ASCII
- Функція bin(), число в двійковий рядок
- Клас bool(), логічне значення об'єкта
- Функція breakpoint(), відладчик коду
- Клас bytearray(), перетворює на масив байтів
- Клас bytes(), перетворює на рядок байтів
- Функція callable(), перевіряє чи можна викликати об'єкт
- Функція chr(), число символ Юнікоду
- Клас classmethod, виконує функцію методом класу
- Функція compile() компілює блок коду Python
- Клас complex(), перетворює на комплексне число
- Функція delattr() видаляє атрибут об'єкта
- Клас dict() створює словник
- Функція dir(), всі атрибути об'єкта
- Функція divmod(), ділить числа із залишком
- Функція enumerate(), лічильник елементів послідовності
- Функція eval(), виконує рядок-вираз із кодом
- Функція exec() виконує блок коду
- Функція filter(), фільтрує список за умовою
- Клас float(), перетворює на речовинне число
- Функція format(), форматує значення змінної
- Клас frozenset(), перетворює на незмінне безліч
- Функція getattr(), значення атрибуту на ім'я
- Функція globals(), змінні глобальної області
- Функція hasattr(), наявність атрибута об'єкта
- Функція hash(), хеш-значення об'єкта
- Функція help(), довідка по будь-якому об'єкту
- Функція hex(), число в шістнадцятковий рядок
- Функція id(), ідентифікатор об'єкта
- Функція input(), введення даних із клавіатури
- Клас int(), перетворює на тип int
- Функція isinstance(), приналежність екземпляра до класу
- Функція issubclass(), перевіряє успадкування класу
- Функція iter() створює ітератор
- Функція len(), кількість елементів об'єкта
- Клас list()
- Функція locals(), змінні локальної області
- Функція map(), обробка послідовності без циклу
- Функція max(), максимальне значення елемента
- Клас memoryview(), посилання на буфер обміну
- Функція min(), мінімальне значення елемента
- Функція next(), наступний елемент ітератора
- Клас object(), повертає безликий об'єкт
- Функція oct(), число у вісімковий рядок
- Функція open() відкриває файл на читання/запис
- Функція ord(), число символу Unicode
- Функція pow(), зводить число до ступеня
- Функція print(), друкує об'єкт
- Клас property(), метод класу як властивість
- Клас range(), що генерує арифметичні послідовності
- Функція repr(), опис об'єкту
- Функція reversed(), що розгортає послідовність
- Функція round(), округляє число
- Клас set(), створює або перетворює на безліч
- Функція setattr() створює атрибут об'єкта
- Клас slice(), шаблон зрізу
- Функція sorted(), виконує сортування
- Декоратор staticmethod(), метод класу в статичний метод
- Клас str(), перетворює об'єкт у рядок
- Функція sum(), сума послідовності
- Функція super(), доступ до успадкованих методів
- Клас tuple(), створює або перетворює на кортеж
- Клас type(), повертає тип об'єкта
- Функція vars(), словник змінних об'єктів
- Функція zip(), об'єднати елементи у список кортежів
- Функція __import__(), знаходить та імпортує модуль
- Функція aiter() створює асинхронний ітератор.
- Функція anext(), наступний елемент асинхронного ітератора