Урок 29 split() и join()

Разделение и объединение строк

⏱ ~8 мин чтения· 📘 Базовый

split() — разделение строки

split() разбивает строку на список подстрок:

text = "яблоко банан вишня"
words = text.split()
print(words)  # ['яблоко', 'банан', 'вишня']

# С указанием разделителя
csv = "1,2,3,4,5"
nums = csv.split(",")
print(nums)  # ['1', '2', '3', '4', '5']

# Ограничение количества разбиений
data = "a-b-c-d"
print(data.split("-", 2))  # ['a', 'b', 'c-d']

Важное отличие: split() без аргументов и с разделителем-пробелом

split() без аргументов разбивает по любому пробельному символу (пробелы, табуляции, переносы строк), автоматически сжимает подряд идущие пробелы и убирает их в начале и конце строки:

text = "   много   пробелов   "
print(text.split())    # ['много', 'пробелов']

text2 = "a\nb\tc"
print(text2.split())   # ['a', 'b', 'c']

А вот split(" ") с явным разделителем-пробелом учитывает каждый пробел и сохраняет пустые строки между ними:

text = "  a  b  c  "
print(text.split(" "))  # ['', '', 'a', '', 'b', '', 'c', '', '']

join() — объединение в строку

join() объединяет список строк через разделитель:

words = ["Python", "это", "здорово"]
sentence = " ".join(words)
print(sentence)  # "Python это здорово"

# Другие разделители
print("-".join(["1", "2", "3"]))  # "1-2-3"
print(", ".join(["a", "b", "c"]))  # "a, b, c"

# join() работает только со строками!
nums = [1, 2, 3]
# ", ".join(nums)  # Ошибка!

# map() применяет функцию к каждому элементу списка,
# превращая числа в строки
print(", ".join(map(str, nums)))  # "1, 2, 3"

Практический пример

Парсинг и форматирование данных:

data = "Иван,25,Сочи"
fields = data.split(",")
name, age, city = fields
print(f"{name} из {city}, возраст {age}")

# Обратно в строку
new_data = ";".join(fields)
print(new_data)  # "Иван;25;Сочи"