Методы split и str.rsplit в языке Python

Python

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

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

Для разделения используется функция split в питоне.

Что такое split в Python

Основная задача функции string.split в python – это возможность разбивать введенную строку по выбранному символу.

Допустим, пользователь вводит «Утро началось с крепкого кофе». Мы отправляем эти данные в функцию и в качестве разделителя выбираем знак пробела. На выходе функция возвращает список (не путать с массивом), состоящий из всех разделенных слов, в нашем случае это будет выглядеть следующим образом: «[‘Утро’, ‘началось’, ‘с’, ‘крепкого’, ‘кофе’]».

Как разделить строку в Python

Теперь, когда мы разобрались с теорией, перейдем к практике.

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

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

Чтобы не вводить вручную, эти символы лучше поместить в одну строку, а после перебирать ее с помощью цикла.

В итоге это будет выглядеть следующим образом:

x = input("text:") # ввод текста с клавиатуры в переменную x
symbols = "!?,.'\"`;():" # список возможных "лишних" символов
for i in symbols: # перебор всех символов внутри строки symbols 
	x = x.replace(i, "") #замена текущего символа на пустое место
print(x) #вывод измененного текста, type:str

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

Делается это следующим образом (дополнение к предыдущему коду):

x = x.split(" ") # деление строки с разделителем в виде обычного пробела, используется шаблон string.split
print (x) # вывод разделенной и сохраненной в список строки, type: list
Для того, чтобы показать, что это действительно список, попробуем вывести первый элемент:
print("Первый элемент:", x[0]) #вывод первого элемента

Теперь проверим результат:

Методы split и str.rsplit в языке Python
Результат первой программы, которая разделяет строку на слова

Выглядит даже лучше, чем хотелось изначально. По сути, на этом возможности функции заканчиваются (за исключением указания второго аргумента, но об этом чуть позже). Если вы до этого работали с этим языком, то могли заметить: метод split – это полная противоположность python функции join, которая, наоборот, склеивает список в строку (кстати, напишите в комментариях, какие функции и модули еще можно рассмотреть).

Примеры разделения строки в Python

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

Разделение сроки по пробелу

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

«Тони Старк 53 “Мстители” Железный человек»

На выходе мы должны получить нормальную анкету.

Алгоритм действий (чтобы представить, как это будет выглядеть):

  1. Считать в переменную строку, введенную с клавиатуры.
  2. Разделить строку с помощью функции.
  3. Заполнить поля анкеты полученными данными.
  4. Вывести результат.

Переходим к реализации. К слову, если вы новичок, то запись словесных алгоритмов – это хороший способ натренировать мозг на задачки.

Код:

data = input("Введите данные:") # считывание данных
data = data.split(" ") # разделение и превращение строки в список
print("Имя:", data[0]) # обращение к первому элементу и т.д.
print("Фамилия:", data[1])
print("Возраст:", data[2])
print("Команда:", data[3])
print("Кличка:", data[4], data[5])

Проверяем результат в консоли и получаем:

Методы split и str.rsplit в языке Python
Результат выполнения программы

Разделение строки по запятой

Теперь попробуем поменять разделитель. Представим, что у нас имеется Расписание, который нужно вывести в формате столбца, а не строки. Входные данные:

«Подъем, Разминка, Завтрак, Пробежка, Рабочая встреча, обед, Отбой».

Код для выполнения задачи:

day_time = input("Введите расписание через запятую:")
day_time = day_time.split(",") # разделение по запятой
z = 1 # счетчик, который позволит пронумеровать расписание
for i in day_time: # перебор списка
	print(str(z), ")", i) # Вывод одного элемента списка
	z += 1 # увеличение порядкового номера

Здесь вы заодно познакомитесь с конструкцией перебора списка, если раньше не знали о ней. Проверяем результат и вводим нужный текст.
То, что вышло, вы можете увидеть на картинке ниже.

Методы split и str.rsplit в языке Python
Результат выполнение программы

Разделение, строк по нескольким разделителям

Довольно часто возникает необходимость разделить элемент по нескольким символам. Обычно, в таких случаях рекомендуется использовать регулярные выражения. Но, учитывая, что инструкций по «регуляркам» в интернете полно, мы предлагаем собственное решение (ну почти собственное).

Вернитесь к самому первому примеру, где лишние символы были заменены на пустоту. Так вот, их можно заменить на один единственный символ, который после станет разделителем.

Пример кода:

txt = input("Введите текст:")
txt = txt.replace(",", " ") # Превращаем все разделители в пробелы
txt = txt.replace(".", " ")
txt = txt.replace("  ", " ") # Делаем из всех двойных пробелов одинарные, ведь именно в этом месте и была замена
txt = txt.split(" ") # Разделяем строку
Методы split и str.rsplit в языке Python
Результат выполнения

Звучит немного нелогично (еще и лишний элемент в конце появился). Да, это костыль, но он помогает избежать использования регулярных выражений.

Как работает параметр maxsplit в функции split?

Помимо основного аргумента, пользователь может указать, сколько раз необходимо заменить выбранный разделитель. Например, у нас есть строка: «Понедельник, вторник, среда, четверг, пятница, суббота, воскресенье». Мы хотим разделить только первые 5 дней, а субботу и воскресенье оставить вместе.

Это делается следующим кодом:

days = input("Введите дни: ")
days = days.split(", ", 5) # 5 раз убрать запятую
print(days)
Методы split и str.rsplit в языке Python
Деление со счетчиком

Как разделить строку посередине

Иногда возникает необходимость найти центральный элемент, а после разделите по нему. У нас прекрасные новости, в таком случае не понадобится даже метод split.

Достаточно с помощью функции len определить размер, разделить его пополам, а после округлить в большую сторону (если размер нечетный). Да, будет использовать несколько новых функций, но они легкие.

text = input("Введите текст:")
middle = math.ceil(len(text) / 2) # ceil – это команда для округлени
print(text[:middle]) # первая часть
print(text[middle:]) #вторая часть
Методы split и str.rsplit в языке Python
Текст разделился ровно посередине

Метод str.rsplit()

В старых версиях питона не работала функция split, ее заменяла другая альтернатива – rsplit. Если быть точнее, то обе эти функции работают одинаково, просто одна из них устарела.

Параметры

Как и в обычном spilt, в rsplit можно передать два аргумента:

  • Разделитель – символ, по которому произойдет разделение;
  • Счетчик – сколько раз надо заменить символ.

Впрочем, никто не мешает использовать эту функцию вместо split и в Python 3.

Описание и примеры

Простой пример с разделением по пробелу с помощью rsplit.

text = input("text:")
text = text.rsplit(" ")
print(text)
Методы split и str.rsplit в языке Python
Результат функции rsplit

Конечно, раз есть функция, то её можно использовать. Однако, мы рекомендуем придерживаться только стандартной split. 

Айтистанция
Добавить комментарий

Мы используем файлы cookie на нашем сайте

OK