Метод str.join() в Python, объединяет список строк
Метод str.join() возвращает строку, которая является конкатенацией (объединением) всех строк-элементов итерируемого объекта iterable .
В итоговой строке элементы объединяются между собой при помощи строки-разделителя str .
Если в последовательности iterable есть какие-либо НЕ строковые значения, включая байтовые строки bytes , то поднимается исключение TypeError .
Примеры создания строки из списка строк.
>>> x = ['возвращает', 'строку', 'которая', 'является', 'конкатенацией'] # объединение списка строк с разделителем "пробел" >>> line = ' '.join(x) >>> line # 'возвращает строку которая является конкатенацией' # в качестве разделителя символ новой строки '\n' >>> line = '\n'.join(x) >>> line # 'возвращает\nстроку\nкоторая\nявляется\nконкатенацией' >>> print(line) # возвращает # строку # которая # является # конкатенацией
Очень часто метод str.join() используется для формирования какого то итогового сообщения, в зависимости от условий в программе. В начале кода определяется пустой список, а по ходу программы, в результате проверок, добавляются части выходного сообщения (например при проверке корректности заполнения полей формы).
В примере будем использовать словарь из двух списков — error (для ошибок) и message (для итогового сообщения):
# здесь поступают какие то данные, пускай # num - должно быть целым числом # name - имя, которое должно быть не менее 3-х букв content = 'message': [], 'error': []> # далее идет код проверок например: if num: if type(num) is int: content['message'].append(f' - Введено число num>') else: content['error'].append(f' - num> - это не целое число') else: content['error'].append(' - Вы не ввели число') if name: if len(name) > 3: content['message'].append(f' - Введено имя: name>') else: content['error'].append(' - Имя не должно быть короче 3-х букв') else: content['error'].append(' - Вы не ввели имя') # в конце кода итоговые проверки и вывод сообщения if content['error']: # если есть какие-то ошибки content['error'].insert(0, 'При вводе данных возникли ошибки:\n') result_message = '\n'.join(content['error']) else: # если все хорошо. content['message'].insert(0, 'Результаты ввода данных:\n') result_message = '\n'.join(content['message']) print(result_message)
Как добавить/соединить существующую строку со списком строк.
Очень просто. Необходимо существующую строку добавить в начало списка методом изменяющихся последовательностей sequence.insert(i, x) , а затем применить метод str.join() .
# начальная строка >>> line = 'Состав корзины покупателя:' # список строк, которые нужно добавить >>> lst_line = ['- картошка', '- морковь', '- лук', '- чеснок', '- свекла'] # вставляем начальную строку по индексу 0 в список >>> lst_line.insert(0, line) # объединяем список строк по разделителю '\n' >>> rez = '\n'.join(lst_line) >>> print(rez) # Состав корзины покупателя: # - картошка # - морковь # - лук # - чеснок # - свекла
Конечно данную операцию можно осуществить другим способом, при помощи оператора присваивания на месте += . Но такой код будет работать значительно дольше и потреблять больше памяти, особенно это заметно, когда строк очень много.
Это происходит потому, что строка str — это неизменяемый тип и при конкатации (сложении строк) КАЖДЫЙ РАЗ образуется НОВАЯ строка, на что тратятся ресурсы системы:
>>> line = 'Состав корзины покупателя:' # список строк, которые нужно добавить >>> lst_line = ['- картошка', '- морковь', '- лук', '- чеснок', '- свекла'] >>> for add_line in lst_line: . line += f'\nadd_line>' . print(line) # Состав корзины покупателя: # - картошка # - морковь # - лук # - чеснок # - свекла
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Метод str.capitalize(), первая буква в строке заглавная
- Метод str.casefold(), сворачивает регистр строки
- Метод str.center(), выравнивает строку по центру
- Метод str.count(), считает совпадения в строке
- Метод str.encode(), преобразует строку в байты
- Метод str.endswith(), совпадение с концом строки
- Метод str.expandtabs(), меняет табуляцию на пробел
- Метод str.find(), индекс первого совпадения в строке
- Метод str.format(), форматирует строку
- Метод str.format_map()
- Метод str.index(), индекс первого совпадения подстроки
- Метод str.isalnum(), строка состоит из цифр и букв
- Метод str.isalpha(), строка состоит только из букв
- Метод str.isascii(), все символы в строке являются ASCII
- Метод str.isdecimal(), проверяет строку на десятичное число
- Метод str.isdigit(), строка состоит только из цифр
- Метод str.isidentifier() проверяет строку на идентификатор Python
- Метод str.islower( ), проверяет строку на нижний регистр
- Метод str.isnumeric(), проверяет строку на числовые символы
- Метод str.isprintable(), проверяет на доступность для печати
- Метод str.isspace(), является ли строка пробелом
- Метод str.istitle(), проверяет наличие заглавных букв в словах
- Метод str.isupper(), проверяет строку на верхний регистр
- Метод str.join(), объединяет список строк
- Метод str.ljust(), ровняет строку по левому краю
- Метод str.lower(), строку в нижний регистр
- Метод str.lstrip(), обрезает символы в начале строки
- Метод str.maketrans(), таблица символов для str.translate()
- Метод str.partition(), делит строку по первому совпадению
- Метод str.removeprefix(), удаляет префикс строки
- Метод str.removesuffix(), удаляет суффикс строки
- Метод str.replace(), меняет подстроку/символ в строке
- Метод str.rfind(), индекс последнего совпадения подстроки
- Метод str.rindex(), индекс последнего совпадения в строке
- Метод str.rjust(), ровняет строку по правому краю
- Метод str.rpartition(), делит строку по последнему совпадению
- Метод str.rsplit(), делит строку справа
- Метод str.rstrip(), обрезает символы на конце строки
- Метод str.split(), делит строку по подстроке
- Метод str.splitlines(), делит текст по символу ‘\n’
- Метод str.startswith(), совпадение с началом строки
- Метод str.strip(), обрежет строку с обоих концов
- Метод str.swapcase(), сменит регистр символов в строке
- Метод str.title(), каждое слово с заглавной буквы
- Метод str.translate(), транслирование строки
- Метод str.upper(), переведет строку в верхний регистр
- Метод str.zfill(), дополнит строку нулями
- Форматирование строк в стиле printf
- F-string. Форматированные строки
Что делает функция join в Python?
Метод join() в Python возвращает строку, конкатенируя все элементы итерации, разделенные заданным разделителем.
separator.join(iterable)
- iterable — любой итерируемый объект, все возвращаемые значения которого являются строками. Если итерируемый объект содержит какие-либо не строковые значения, то будет вызавно исключение TypeError .
- separator — разделитель, с которым будут конкатенироваться элементы итерации
a = ['Раз', 'два', 'три', 'четыре', 'пять'] print(', '.join(a)) # => Раз, два, три, четыре, пять # Спецсимвол '\n' в качестве разделителя print('\n'.join(a)) # => Раз # => два # => три # => четыре # => пять
Преобразование списка в строку методом join
Метод join в Python отвечает за объединение списка строк с помощью определенного указателя. Часто это используется при конвертации списка в строку. Например, так можно конвертировать список букв алфавита в разделенную запятыми строку для сохранения.
Метод принимает итерируемый объект в качестве аргумента, а поскольку список отвечает этим условиям, то его вполне можно использовать. Также список должен состоять из строк. Если попробовать использовать функцию для списка с другим содержимым, то результатом будет такое сообщение: TypeError: sequence item 0: expected str instance, int found .
Посмотрим на короткий пример объединения списка для создания строки.
vowels = ["a", "e", "i", "o", "u"] vowels_str = ",".join(vowels) print("Строка гласных:", vowels_str)Этот скрипт выдаст такой результат:
Строка гласных: a,e,i,o,uПочему join() — метод строки, а не списка?
Многие часто спрашивают, почему функция join() относится к строке, а не к списку. Разве такой синтаксис не было бы проще запомнить?
vowels_str = vowels.join(",")Это популярный вопрос на StackOverflow, и вот простой ответ на него:
Функция join() может использоваться с любым итерируемым объектом, но результатом всегда будет строка, поэтому и есть смысл иметь ее в качестве API строки.
Объединение списка с несколькими типами данных
Посмотрим на программу, где предпринимается попытка объединить элементы списка разных типов:
Метод join в python
python join — метод для работы со строками, позволяет включать в строку элементы, например, объектов типа list. При этом добавляются любые разделители.
Использование python join
Создадим объект типа 'список' с произвольным количеством элементов:
['first', 'second', 'third', 'fourth']
Теперь будем использовать метод join определив в начале разделитель элементов
'first| second| third| fourth'
На выходе получим тип 'строка', в строку объединены все элементы списка
Метод JOIN с числами
Переопределим переменную задав целые числа вместо строк
В результате будет возникать исключение
Traceback (most recent call last):
File «», line 1, in
TypeError: sequence item 0: expected str instance, int foundJOIN может принимать на вход только строку, поэтому все элементы следует преобразовывать.
Если элементов не много, то можно просто добавить кавычки
Или можно использовать генератор списков