Как присоединять/объединять/добавлять строки в Python

Вступление

В этом коротком уроке мы рассмотрим, как объединять строки в Python разными способами.

Стоит отметить, что строки в Python нельзя поменять после создания:

newString = "Some new string"

Если вы хотите изменить эту строку – нужно создать новую строку. Так же и с соединением строк –нужно создать новый объект.

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

Объединение строк – это соединение двух или более строк вместе, как звенья в цепочке. Вы можете объединять их в любом порядке. Например, можно объединить str1 между str2 и str3.

Добавление строкдобавление одной или нескольких строк в конец другой строки.

В некоторых случаях эти термины похожи. Добавление строк – это та же операция, что и объединение строк в конце другой. Начнем с самого простого способа объединения/добавления двух (или более) строк.

Объединяем/добавляем строки с помощью оператора +

В Python строка – список символов. Это значит, что оператор + можно использовать для добавления составляющих их элементов вместе в новый список:

title = "Prof. "
name = "Richard Feynman"

result = title + name
print(result)

Наш результат:

Prof. Richard Feynman

Этот оператор не ограничивает количество строк, которые можно соединить, поэтому вы можете легко объединить большое количество строк:

string1 = "Concatenating"
string2 = "strings"
string3 = "in Python"
string4 = "is easy!"

print(string1 + string2 + string3 + string4)

Хотя, если ваша цель – построить предложение из списка строк, подобных этой, объединение их вручную и без специальных символов неэффективно и приводит к непонятным результатам:

Concatenatingstringsin Pythonis easy!

Было бы гораздо разумнее дописать пробел в конце строк:

strings = ["Concatenating", "strings", "in Python", "is easy!"]

result = ""
for string in strings:
    result += string + " "

print(result)

Результат:

Concatenating strings in Python is easy!

Вы можете использовать оператор += для объединения двух строк, как и в предыдущем примере. Вам не придётся создавать новую переменную для хранения результатов, так как вы можете повторно использовать одну из существующих ссылочных переменных для назначения новому объекту в памяти:

string1 = "one"
string2 = "two"

string1 += string2
print(string1) # Output: onetwo

Ограничение оператора +

Основное ограничение оператора +: нельзя смешивать и сопоставлять типы. Например, вы не можете добавить целое число в список символов:

print("some string" + 2)

Многие языки, например, JavaScript и Java, это понимают и автоматически преобразуют целое число в строку и объединяют строки, но Python выдаст TypeError:

TypeError: can only concatenate str (not "int") to str

Но есть простой обходной путь: можно использовать встроенную функцию str(), которая преобразует совместимые типы данных в строку. Давайте добавим несколько целых чисел в наш список строк и выделим все элементы с помощью str(). Вдруг там есть нестроковые элементы:

strings = ["Concatenating", "strings", "in Python", "is easy!", 5, 2]

result = ""
for string in strings:
    result += str(string) + " "

print(result)

Результат:

Concatenating strings in Python is easy! 5 2 

Объединяйте или добавляйте строки с помощью оператора *

Если вы хотите создать новую строку, повторив строку n-раз и добавив ее, можно сделать это с помощью оператора *:

string = "w"

print(string * 3) # Output: www

Ещё больше пользы в сочетании с оператором +:

print("w"*3 + "." + "uproger.com")

Результат:

www.uproger.com

Объединяйте или добавляйте строки с помощью оператора %

Опять же, когда мы объединяем, мы не обязательно добавляем строку в конец. Используя оператор %, мы можем выполнить интерполяцию строк. Добавив % в строку в качестве маркера, мы можем позже заменить маркеры конкретными строками:

string = "This %s is a %s string" % ("here", "random")

print(string)

Вот что получится:

This here is a random string

Аналогично, вы можете использовать другие маркеры для других типов данных:

  • %d для целочисленных:
string = "This is a string%d" % (1)
print(string) # Output: This is a string
  • %c для буквенных:
string = "This string starts with a %c" % ('T')
print(string) # Output: This string starts with a T
  • %f для вещественных:
string = "There is a %f percent chance that you'll learn string concatenation in Python after reading this article" % (99.99)
print(string) # Output filled 99,990000 in %f place

Примечание: если вы хотите явно указать, сколько цифр должно быть округлено, например, до 2, можно сделать это с помощью: %.2f.

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

Метод join() принимает итерацию в качестве аргумента и возвращает строку, созданную путем соединения элементов этой итерации. Стоит отметить, что это должны быть строки – каждый элемент по своей сути не преобразуется с помощью str(), в отличие от нашего предыдущего метода.

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

my_list = ["1", "2", "3", "4"] # List - iterable
string_from_list = "-".join(my_list) # The separator is "-"

print(string_from_list)

Вот, что получится:

1-2-3-4

Во многих случаях разделителем можно считать пробел, поэтому обычно пишется так:

" ".join(iterable)

Реализация метода join()

Поскольку метод join() может вести себя немного странно, давайте попробуем метод join().

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

import itertools

def join(iterable, separator):
    # Empty string to hold result
    result = ""
    # Flatten 2D potentially 2D list into 1D
    iterable = list(itertools.chain(*iterable))
    # Concatenate strings with separator
    for string in iterable:
        result += str(string) + separator
    return result
    

string = join(['a', 'b', 'c'], ' ')
string2 = join(['a', ['b', 'c'], 'd'], ' ')

print(string)
print(string2)

Результат:

a b c 
a b c d

Объединяем строки с помощью пробела

Простой способ объединить строки – использовать пробел. Этот подход обычно используется только для печати, так как назначить его объекту в памяти легко, но неудобно:

print("Concat" " strings" " using Space")

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

print("Concat", "strings", "using Space")

Результат один и тот же:

Concat strings using Space

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

string = "this " "is " "a " "big " "string"
print(type(string))
print(string)

Результат:

<class 'str'>
this is a big string

Вы даже можете создавать многострочные строки. Чтобы это сделать, мы добавляем \ в конец каждой строки, чтобы Python знал, что существует более одной строки:

multi_line_string = "this " "string " \
			   	  "is coded in " "three lines " \
    			  "but printed in one"
			   	  
print(multi_line_string)

Результат:

this string is coded in three lines but printed in one

Но это не очень удобно, лучше делать по-другому.

Примечание: тот же эффект не может быть достигнут с переменными, только строковыми литералами:

string1 = "one string"
string2 = "two string"

final_string = string1 string2

Результат:

File "<string>", line 4
    final_string = string1 string2
                           ^
SyntaxError: invalid syntax

Заключение

Присоединить/добавить/объединить строки в Python довольно просто. Существует много способов, как это сделать. Всё зависит от ваших предпочтений.

В этом коротком уроке мы рассмотрели некоторые способы объединения строк.

Ответить