{"id":14291,"url":"\/distributions\/14291\/click?bit=1&hash=257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","hash":"257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","title":"\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u043d\u0430 Ozon \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0451\u0442","buttonText":"","imageUuid":""}

5 способов конкатенировать строки в Python 3

Вступление

Всем начинающим кодерам привет!

Конкатенация строк - операция, "склеивающая" несколько строк в одну. Это нельзя назвать особенностью языка, поскольку она присутствует и в PHP, и в Java и много где еще. Для сегодняшнего топа я собрал все способы конкатенации, кроме самых нелепых. Представляю вашему вниманию 5 способов конкатенации строк в Python 3. Сегодня мы рассмотрим варианты множественной конкатенации с применением соединительной строки.

1 способ

Начнем с проверенной классики - оператора сложения для последовательной конкатенации. Думаю, всем известно, как это работает. Недостаток данного способа - в функции должно быть фиксированное число строк. Вы должны точно знать, сколько в списке строк. Я надумал 2 варианта реализации. Первый - с передачей в аргументы функции всех строк через запятую:

def conc1_1(one, tho, three, four, symbol): return one + symbol + two + symbol + three + symbol + four

Второй - со списком строк в аргументах:

def conc1_2(strings, symbol): return strings[0] + symbol + strings[1] + symbol + strings[2] + symbol + strings[3]

2 способ

Здесь мы используем строковый метод join(), выполняющий конкатенацию с использованием соединительной строки. Это самое короткий и логичный ответ на такой случай:

def conc2(strings, symbol): return symbol.join(strings)

3 способ

Если нам не известно количество строк в списке, и почему-то мы не используем метод join() (не могу себе представить такую ситуацию), то этот вариант для нас. Он аналогичен работе метода join()

Как это работает? Присваиваем переменной результата значение первой строки из списка и поочередно конкатенируем к нему соединительный символ и следующие в списке строки, пока не закончится список:

def conc3(strings, symbol): res = strings[0] for i in strings[1::]: res = res + symbol + i return res

4 способ

Давайте вспомним, что с версии Python 2.6 существует метод format(), предоставляющий возможности форматирования строк. Строки из его аргументов подставляются в исходную строку вместо {}. Поставив рядом две и более пары фигурных скобок, можно соединить 2 и более строк. Аргументы могут быть по умолчанию, а могут быть нумерованными или именованными.

Я написал 2 варианта программы с использованием аргументов по умолчанию и нумерованных:

def conc4_1(strings, symbol): res = strings[0] for i in strings[1::]: res = "{}{}{}".format(res, symbol, i) return res
def conc4_2(strings, symbol): res = strings[0] for i in strings[1::]: res = "{0}{1}{2}".format(res, symbol, i) return res

5 способ

А здесь напомню про форматирование строк без метода format(), позаимствованное из C (это я прочитал на форуме). Работает оно точно так же, как и встроенный метод, но не позволяет передавать нумерованные и именованные аргументы. В общем вот:

def conc5(strings, symbol): res = strings[0] for i in strings[1::]: res = "%s%s%s" % (res, symbol, i) return res

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

def conc6(strings, symbol): res = strings[0] list_of_strings = list(strings) for i in range(1, len(strings)): list_of_strings.insert(i + i - 1, symbol) for i in list_of_strings[1::]: res = res + i return res

Статистика быстродействия

Для начала - как измерить время работы программы? Об этом я расскажу в следующей статье. Ну а пока что измерим время работы данного куска кода, где i - одна из шести функций (conc1_2, conc2, conc3, conc4_1, conc4_2, conc5):

for j in range(100000): a = (i(my_list, ' '))

И вот результаты:

Как мы можем видеть - встроенный метод join() наилучшим образом подходит для задачи конкатенации строк. Он и работает быстрее всего и имеет простой синтаксис. Ну а хуже всего показало себя форматирование строк. Хоть все это и выглядит лаконично, но в плане скорости уступает стандартному методу более, чем в полтора раза.

Мораль сей басни такова: используйте join() и не парьтесь. Лучше функции, чем "вылизанный" сообществом метод вы, вероятно, не сделаете.

Заключение

Я надеюсь, что вам была интересна данная статья, и вы разобрались в теме. Если хотите меня дополнить - пишите в комментариях. Удачи в мире IT!

0
Комментарии
-3 комментариев
Раскрывать всегда