Python join() – как объединить список в строку в Python

join() это одна из встроенных строчных функций в Python, которая позволяет нам создать новую строку из списка элементов строки с определенным пользователем разделителем.

Сегодня мы будем исследовать join() и узнать о:

  • join() синтаксис
  • как использовать join() чтобы объединить список в строку
  • как объединить кортежи в строку с помощью join()
  • как использовать join() со словарями
  • когда не использовать join()

join() Синтаксис

str.join(iterable)
  • он требует только одного входящего аргумента, итерированного. Итерированный – это любой объект, поддерживающий итерацию, то есть он определил __next__ и __iter__ методы Примерами итерированных элементов есть списки, кортежи, строки, словари и наборы.
  • join() это встроенная строчная функция, поэтому для ее вызова нужна строка
  • он возвращает одно исходное значение, строка, образованная комбинированием элементов итерированного элемента с вызывающей его строкой, действуя как разделитель

Как использовать join() чтобы объединить список в строку

Давайте рассмотрим пример:

Мы создаем строчку, состоящую из одного вхождения | персонаж, как это:

s = "|"

Мы можем использовать dir чтобы увидеть, какие методы доступны для вызова с помощью s строчный объект:

dir(s)

Вот результат:

изображение-146

Среди разных атрибутов и имен методов мы можем увидеть join() метод:

изображение-147

Давайте создадим список строк:

country_names = ["Brazil", "Argentina", "Spain", "France"]

Теперь объедините элементы списка в одну строку с помощью | как разделитель:

country_names = ["Brazil", "Argentina", "Spain", "France"]
s.join(country_names)
изображение-148

Вот мы это видим join() возвращает одну строку в качестве исходных данных. Содержимое вызванной строчной переменной join() является разделителем, разделяющим элементы списка итерированного country_names формирующий выход. Мы можем использовать любую строку в качестве разделителя, например:

s = ","
s.join(country_names)

или это:

s = "__WC__"
s.join(country_names)
изображение-149

Использование join() со списками строк имеет много полезных приложений. К примеру, мы можем использовать его для удаления лишних пробелов между словами. Предположим, что мы имеем такое предложение, как ниже, где есть несколько пробелов. Мы можем использовать split() который разделится на пробелы, чтобы создать список слов:

paragraph = "Argentina  wins   football   world cup 2022 in a nail biting final match that led to a \
spectacular    penalty shootout. Football lovers   across the world   hailed   it as one of the most\
 memorable   matches."
step1 = paragraph.split()
print(step1)

Теперь используем join() использование одного пробела для воспроизведения исходного предложения без дополнительных пробелов между ними:

" ".join(step1)
изображение-156

Как объединить кортежи в строку с помощью join()

Кортежи – это один из встроенных типов данных в Python, который не позволяет изменять их после создания – они неизменны. Кортежи — это разделенные запятыми списки элементов, заключенных в (), как это:

t = ('quarter-final', 'semi-final', 'final')

Мы можем объединить элементы кортежа так же, как объединяли вместе элементы списка join():

",".join
     {
        "world cup":{
            "sport":"Football",
            "info":{"year":"2022", "country":"Argentina"}
        }
     }
    }

Мы можем использовать join() чтобы получить разделенную запятыми строку с ключами и значениями, как это:

column_values = ",".join(d["event"]["world cup"]["info"].keys())
row_values = ",".join(d["event"]["world cup"]["info"].values())
изображение-152

Когда не использовать join()

join() не сработает, если вы попробуете:

  • сочетать итерированные элементы с элементами, не являющимися строками
  • объединить вложенные итерированные элементы

Давайте рассмотрим несколько примеров.

Итерированные элементы с элементами, не являющимися строками

join() нельзя применять к последовательностям, содержащим элементы, отличные от строк. Потому мы не сможем объединить списки с элементами числового типа. Это вызвало бы TypeError так:

names_and_numbers = ["Tom", 1234, "Harry"]
",".join(names_and_numbers)
изображение-153

Вложенные итерации

Если мы попытаемся соединить значение словаря следующим образом:

nested = ["Tom", "Harry", ["Jack", "Jill"]]
",".join(nested)

Мы получим TypeError, как join() ожидает список строк, но получил список списка строк.

изображение-154

Для таких случаев выровняйте список следующим образом:

flatten = 
[ x for x in nested if isinstance(x, list)!=True] + \
[ e for each in nested for e in each if isinstance(each, list)==True]

Вот это:

[ x for x in nested if isinstance(x, list)!=True] 

проверяет, входит ли каждый элемент nested это список. Если нет, он добавляет его в новый список. И это:

[ e for each in nested for e in each if isinstance(each, list)==True]

создает новый одномерный элемент списка для любого элемента в nested являющийся списком. Теперь бежим join() нравится это:

nested = ["Tom", "Harry", ["Jack", "Jill"]]
flatten = [ x for x in nested if isinstance(x, list)!=True] + \
[ e for each in nested for e in each if isinstance(each, list)==True]
",".join(flatten)
изображение-155

Подведению

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

Надеюсь, вам понравилась эта статья, и желаю вам счастливой и омолаживающей недели.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *