Разделение строки в Python — это процесс обработки текста или манипулирования строками, полезный в таких областях, как обработка данных, веб-разработка и анализ текста.
Давайте посмотрим, как мы можем использовать эти методы для разделения строки по каждому n-му символу в Python.
- С помощью цикла for
- С помощью цикла while
- С использованием понимания списка
- Используя регулярное выражение
- Используя zip_longest
- С помощью Textwrap
- С помощью list+map+join+zip
- С помощью функции islice
- С помощью срезов
- С помощью рекурсии с нарезкой
- Заключение
С помощью цикла for
Цикл for в Python используется для перебора коллекции до заданного диапазона. Мы используем цикл для разделения строки на фрагменты по n символов.
Вот пример кода Python разделения строки с помощью цикла for.
text = "The USA is a diverse and vibrant country." split_chunks = [] n = 7 for index in range(0, len(text), n): split_chunks.append(text[index : index + n]) print(split_chunks)
Мы используем метод нарезки строки, чтобы разделить строку, а затем добавить нарезанную строку в список с помощью функции Append() в списке Python.
split_chunks.append(text[index : index + n])
Этот код разбивает текст строки по каждому n-му символу(в данном случае n=7) с помощью цикла for, в результате чего получается список подстрок, хранящийся в Split_chunks. Каждая подстрока содержит n символов, кроме последней подстроки.
Выход:
['The USA', ' is a d', 'iverse ', 'and vib', 'rant co', 'untry.']
Приложены снимки, иллюстрирующие код Python и его выходные данные в Visual Studio.
С помощью цикла while
Цикл while в Python используется для многократного выполнения блока кода, пока указанное условие истинно.
Он перебирает строку, добавляя подстроки длины n в список данных до конца строки.
Вот код для разделения строки по каждому n-му символу в Python с использованием цикла while:
def split_string_while_loop(s, n): data = [] i = 0 while i < len(s): data.append(s[i:i+n]) i += n return data string = "Washington DC is the capital of the United States of America" n = 5 result = split_string_while_loop(string, n) print(result)
Вывод:
['Washi', 'ngton', ' DC i', 's the', ' capi', 'tal o', 'f the', ' Unit', 'ed St', 'ates ', 'of Am', 'erica']
Вот объединенное представление сценария Python и его результатов в Visual Studio.
С использованием понимания списка
Понимание списков — это краткий и мощный способ создания списков в Python.
Мы будем использовать понимание списка, чтобы разделить строку и сгенерировать список подстрок по заданному количеству символов «n».
Код:
text = "New York City is one of the most populous city in USA." n = 6 out = [(text[i:i+n]) for i in range(0, len(text), n)] print(out)
В этом примере мы разбиваем строковый текст на фрагменты по n символов(n = 6), используя понимание списка в Python.
Он генерирует список подстрок, каждая из которых содержит n символов в Python, путем перебора диапазона индексов и извлечения подстрок длины n из исходной строки.
Выход:
['New Yo', 'rk Cit', 'y is o', 'ne of ', 'the mo', 'st pop', 'ulous ', 'city i', 'n USA.']
Ниже показан код Python вместе с его выходными данными, полученными в Visual Studio.
Используя регулярное выражение
Регулярные выражения(regex) — это мощные инструменты для сопоставления шаблонов и обработки текста в Python.
Мы используем функцию re.findall() для поиска всех вхождений шаблона в строке и возврата списка совпадающих подстрок.
Давайте посмотрим пример разделения строки по каждому n-му символу в Python с использованием модуля re:
import re def split_string_regex(s, n): return re.findall('.{1,%d}' % n, s) string = "Los Angeles is a city in California, USA" n = 5 result = split_string_regex(string, n) print(result)
Используя регулярные выражения, этот код разбивает строку на фрагменты по n символов(n=5). Он использует функцию re.findall() в Python для поиска всех подстрок, соответствующих шаблону регулярного выражения.
return re.findall('.{1,%d}' % n, s)
{1,%d} соответствует любому символу, встречающемуся от 1 до n раз. Результатом является список подстрок, каждая из которых содержит n символов, извлеченных из исходной строки.
Выход:
['Los A', 'ngele', 's is ', 'a cit', 'y in ', 'Calif', 'ornia', ', USA']
Представлено составное изображение, демонстрирующее как код Python, так и его выходные данные в Visual Studio.
Используя zip_longest
zip_longest — это функция из модуля itertools в Python, которая объединяет несколько итераций в кортежи.
Он принимает итерируемый объект(строку), делит его на фрагменты длиной n и заполняет все недостающие символы в последнем фрагменте указанным значением заполнения.
Вот пример разделения строки по каждому n-му символу в Python с использованием функции zip_longest:
from itertools import zip_longest def fun(n, i, value=None): args = [iter(i)] * n return zip_longest(fillvalue=value, *args) my_string = "California is a major hub for technology companies." n = 8 op_str = [''.join(l) for l in fun(n, my_string, '')] op = [] for a in op_str: op.append(a) print(op)
Выход:
['Californ', 'ia is a ', 'major hu', 'b for te', 'chnology', ' compani', 'es.']
Ниже показан объединенный снимок экрана сценария Python и его результатов в Visual Studio.
С помощью Textwrap
Textwrap — это модуль Python, который предоставляет функции для переноса и форматирования текста.
Функция Wrap() из модуля textwrap используется для разделения строки на несколько строк одинаковой длины.
Если возможно, мы используем его для разделения строки на строки, содержащие n символов, путем переноса текста по границам слов.
Код:
from textwrap import wrap s = "Texas is the second-largest by both area and population." n = 5 print(wrap(s, n))
Результатом является список подстрок, содержащий n последовательных символов, извлеченных из исходной строки.
Выход
['Texas', 'is', 'the s', 'econd', '-larg', 'est', 'by', 'both', 'area', 'and p', 'opula', 'tion.']
Вот снимок экрана примера с использованием редактора кода Visual Studio.
С помощью list+map+join+zip
Этот подход сочетает в себе несколько встроенных функций и возможностей Python для разделения строки на группу из n символов.
Мы используем метод zip() для группировки элементов каждого итератора в кортежи длины n. Затем Map(».join, …), чтобы применить функцию join() к каждому кортежу, объединяя символы в строки.
Вот пример разделения строки по каждому n-му символу в Python:
s = "The Statue of Liberty is a symbol of freedom and democracy in the United States." n = 10 print(list(map(''.join, zip(*[iter(s)]*n))))
В этом примере я комбинирую zip, map, join и понимание списков. Он создает итератор для строки, группирует символы в кортежи длины n, объединяет каждый кортеж в строку и, наконец, преобразует результат в список подстрок.
Выход:
['The Statue', ' of Libert', 'y is a sym', 'bol of fre', 'edom and d', 'emocracy i', 'n the Unit', 'ed States.']
Прилагается визуальное представление кода Python и его вывода в Visual Studio.
С помощью функции islice
Функция islice в Python означает «итерируемый срез».
Она позволяет эффективно разрезать и перебирать элементы итерируемого объекта(например, список, кортеж или строку) без создания ненужных промежуточных последовательностей.
Код:
from itertools import islice famouse_place = "The Grand Canyon is one of the natural wonders of the world." n = 8 def split_fun(n, iterable): i = iter(iterable) piece = list(islice(i, n)) while piece: yield ''.join(piece) piece = list(islice(i, n)) print(list(split_fun(n, list(famouse_place))))
В коде мы используем iter() для создания итератора по строке(famouse_place), а затем используем islice() для создания итератора, который возвращает элементы из входного итератора до указанного значения n.
Затем list(islice(i, n)) генерирует список из N последовательных символов из входного итератора.
Выход:
['The Gran', 'd Canyon', ' is one ', 'of the n', 'atural w', 'onders o', 'f the wo', 'rld.']
Вот снимок сценария Python и полученного результата в Visual Studio.
С помощью срезов
Функция Sliced() — это встроенный метод модуля more_itertools Python, который необходимо установить отдельно, используя:
pip install more_itertools
Метод позволяет разбить итерируемый объект на фрагменты заданного размера, даже если общая длина итерируемого объекта не делится на размер фрагмента без остатка.
Код:
from more_itertools import sliced def split_string_with_sliced(s, n): return list(sliced(s, n)) string = "The White House is workplace of the President of the USA." n = int(input("Enter Split Range: ")) result = split_string_with_sliced(string, n) print(result)
Он возвращает список подстрок, каждая из которых содержит n символов, извлеченных из исходной строки. Функция среза обрабатывает случаи, когда общая длина строки не делится на n без остатка, гарантируя, что все символы будут включены в выходные данные.
Выход:
['The Whi', 'te Hous', 'e is wo', 'rkplace', ' of the', ' Presid', 'ent of ', 'the USA', '.']
Вот снимок экрана примера с использованием редактора кода Visual Studio.
С помощью рекурсии с нарезкой
Рекурсия — это метод программирования, при котором функция вызывает саму себя для решения небольших экземпляров одной и той же проблемы в Python.
Использование рекурсии для этой задачи не является предпочтительным подходом, поскольку ее выполнение займет больше времени по сравнению с другими методами, которые мы рассмотрели.
Вот пример разделения строки по каждому n-му символу в Python с использованием рекурсии.
def split_string_recursive(s, n): if len(s) <= n: return [s] if s else [] else: return [s[:n]] + split_string_recursive(s[n:], n) # Example usage: string = "The Empire State Building is a famous landmark in New York City." n = 10 result = split_string_recursive(string, n) print(result)
Выход:
['The Empire', ' State Bui', 'lding is a', ' famous la', 'ndmark in ', 'New York C', 'ity.']
Ниже показан код Python и его выходные данные, полученные в Visual Studio.
Заключение
Здесь мы рассмотрели различные методы разделения строки по каждому n-му символу в Python. Мы углубились в 10 различных методов, каждый из которых предлагает свой подход для эффективного решения этой задачи.
Мы рассмотрели множество возможностей: от простых итераций с циклами for и while до более сложных методов, таких как понимание списков, регулярные выражения и рекурсия со срезами.