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;Сочи"