Объединение строк в Python [с примерами]

С помощью Python вы можете объединять строки разными способами, базовый из них — с помощью оператора +. Если у вас есть две строки (string1 и string2), вы можете объединить их с помощью выражения string1+string2. Python также предоставляет метод format() для объединения нескольких строк вместе.

Первый и самый простой способ объединения двух или более строк Python — использование оператора +.

Например, давайте определим две переменные типа string и объединим их с помощью оператора +.

>>> string1 = "I like"
>>> string2 = "Python"
>>> string1+string2
>>> 'I likePython'         

Я использовал + для объединения двух строк, но результат не совсем тот, который мы ожидали. Слова «like » и «Python» должны быть разделены пробелом.

Используя оператор +, мы также можем объединить более двух строк. В этом случае мы также можем объединить дополнительную строку, содержащую один пробел (" ").

>>> string3 = " "
>>> string1+string3+string2
'I like Python'         

Теперь все выглядит лучше.

Если подумать, то нет смысла хранить один пробел в переменной string3, поэтому мы можем написать:

>>> string1+" "+string2
'I like Python'         

Объединение строк в несколько строк

Что делать, если у вас есть несколько строк и вы хотите создать одну строку, охватывающую несколько строк?

Это можно сделать, разделив строки символом новой строки (\n) вместо использования пробела, как мы делали в предыдущем примере:

>>> string1 = "Python modules:"
>>> string2 = "Pandas"
>>> string3 = "subprocess"
>>> string4 = "json"
>>> print(string1+"\n"+string2+"\n"+string3+"\n"+string4)
Python modules:
Pandas
subprocess
json                 

Вы можете видеть, что каждая строка печатается в начале новой строки.

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

>>> strings = ["Python modules:", "Pandas", "subprocess", "json"]
>>> for string in strings:
        print(string)         

Python modules:
Pandas
subprocess
json

В этом случае мы не указали символ новой строки в операторе print внутри цикла for, поскольку функция print в Python неявно добавляет символ новой строки в конец строки.

Чтобы удалить неявный символ новой строки, добавляемый в конец строки функцией печати Python, можно передать дополнительный параметр с именем end.

>>> for string in strings:
        print(string, end='')         

Python modules:Pandassubprocessjson

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

>>> for string in strings:
        print(string+"\n", end='')  
       
Python modules:
Pandas
subprocess
json

Это всего лишь упражнение для изучения того, как работают функция печати и оператор +.

В реальной программе вы не будете передавать дополнительный параметр «end» и затем объединять символ новой строки, учитывая, что это то, что функция print в любом случае делает по умолчанию.

Далее в этом уроке вы узнаете лучший способ объединения элементов списка строк в одну строку.

Объединение строки и числа с плавающей точкой

Логика, изложенная для целых чисел в предыдущем разделе, применима и к другим типам чисел, например, к числам с плавающей точкой.

Если мы попытаемся объединить строки с float, мы также получим TypeError, просто с немного другим сообщением об ошибке по сравнению с предыдущим: можно объединить только str (не «float») с str.

>>> string1+" "+3.3+" "+string2
Traceback (most recent call last):
  File "", line 1, in 
    string1+" "+3.3+" "+string2
TypeError: can only concatenate str (not "float") to str         

Мы снова можем преобразовать число с плавающей точкой в ​​строку, используя функцию str():

>>> string1+" "+str(3.3)+" "+string2
"Let's concatenate 3.3 strings"         

Теперь вы знаете, как объединять строки и числа в Python.

Объединение строк в цикле For

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

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

Это то, что мы бы сделали, используя цикл for в Python:

>>> domains = ["codefather.tech", "google.com", "bbc.com", "cnn.com"]
>>> skip_domains = ["cnn.com", "bbc.com"]
>>> final_domains = ""
>>> for domain in domains:
        if domain not in skip_domains:
            final_domains += domain+"\n"
>>> print(final_domains, end='')
codefather.tech
google.com    

Список skip_domains отфильтровывает домены, которые мы не хотим включать в итоговую строку.

Также обратите внимание, что для генерации строки final_domains мы используем оператор +=, который объединяет то, что находится справа от знака равенства, с существующим значением строки final_domains.

Вот пример, поясняющий это:

>>> final_domains = "codefather.tech\n"
>>> final_domains += "google.com"+"\n"
>>> print(final_domains, end='')
codefather.tech
google.com                 

Выражение с использованием += можно также записать следующим образом:

>>> final_domains = "codefather.tech\n"
>>> final_domains = final_domains+"google.com"+"\n"
>>> print(final_domains, end='')
codefather.tech
google.com        

Таким образом, оператор += — это более краткий способ объединения строк в существующую строку и сохранения результата в существующей строке.

Объединение строк с использованием метода форматирования Python

Оператор+позволяет объединять строки, но это не значит, что это лучший способ объединения строк в Python.

Следующий пример показывает, почему…

Представьте, что вы хотите объединить несколько строк и переменных:

>>> first_number = 7
>>> second_number = 3
>>> print("The difference between "+str(first_number)+" and "+str(second_number)+" is "+str(first_number - second_number))
The difference between 7 and 3 is 4     

Посмотрите на выражение, которое нам пришлось написать, чтобы вывести очень простую строку.

Это довольно грязно…

…также легко ошибиться со всеми этими пробелами, знаками плюс и вызовами функции str().

Есть лучший способ сделать это с помощью строкового метода format().

Как объединить список Python с помощью метода format()

Взгляните на официальную документацию Python выше…

Мы можем определить одну строку и использовать фигурные скобки {} в строке, где мы хотим указать значение переменной.

Давайте перепишем наш пример:

>>> print("The difference between {} and {} is {}".format(first_number, second_number, first_number - second_number))
The difference between 7 and 3 is 4       

Это намного лучше!

Использование метода форматирования Python с позиционными аргументами

При использовании метода строки format() мы также можем указывать числовые индексы в фигурных скобках.

Эти индексы представляют позиционные аргументы, передаваемые методу форматирования.

Вот пример:

>>> print("The difference between {0} and {1} is {2}".format(first_number, second_number, first_number - second_number))
The difference between 7 and 3 is 4         

Индексы 0, 1 и 2 относятся к первому, второму и третьему параметрам, переданным методу форматирования.

Чтобы лучше показать, как это работает, давайте поменяем местами индекс 0 и индекс 2:

>>> print("The difference between {2} and {1} is {0}".format(first_number, second_number, first_number - second_number))
The difference between 4 and 3 is 7        

Вы это видите?

Значения первой и третьей переменных в финальной строке поменялись местами.

Это также может привести к путанице, если вам нужно передать методу форматирования много параметров.

Но есть способ еще лучше…

Использование метода форматирования Python с аргументами ключевых слов

Метод format() также поддерживает ключевые аргументы, которые делают код намного более читабельным.

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

>>> print("The difference between {fnum} and {snum} is {difference}".format(fnum=first_number, snum=second_number, difference=first_number - second_number))
The difference between 7 and 3 is 4         

Я назначил ключевые слова для идентификации параметров, переданных в метод форматирования. И я указал эти ключевые слова в фигурных скобках.

Гораздо чище!

Кроме того, я могу поменять порядок, в котором параметры передаются в метод форматирования, и вывод не изменится:

>>> print("The difference between {fnum} and {snum} is {difference}".format(snum=second_number, difference=first_number - second_number, fnum=first_number))
The difference between 7 and 3 is 4         

Заключение

С помощью этого руководства вы узнаете практически все, что вам нужно для объединения строк в Python.

Я предлагаю привыкнуть к синтаксису метода format(), и это сделает ваш код намного чище.

Автор

Фото аватара

Владимир Михайлов

Программист на Python с большим количеством опыта и разнообразных проектов.