Объединение и повторение строк в Python
Два или более строковых литерала, те, которые заключены в кавычки рядом друг с другом, автоматически объединяются.
>>> 'Py' 'thon' # 'Python'
Эта функция особенно полезна, когда необходимо разделить длинные строки, что бы они помещались на экране в IDE:
>>> text = ('Поместите несколько строк в круглые скобки ' . 'чтобы они соединились вместе.') >>> text # 'Поместите несколько строк в круглые скобки, чтобы они были соединены вместе.'
Такое поведение дает возможность так же делить форматированные строки (f-строки), например:
>>> a = 'например: 2' >>> b = 'вместе' >>> text = (f'Поместите несколько строк (a>) в круглые скобки ' . f'чтобы они соединились b>.') >>> text # 'Поместите несколько строк (например: 2) в круглые скобки чтобы они соединились вместе.'
Такое деление строк работает только с литералами, но не с переменными или выражениями:
# не удастся объединить переменную и строковый литерал >>> prefix = 'Py' >>> prefix 'thon' # File "", line 1 # prefix 'thon' # ^ # SyntaxError: invalid syntax >>> ('un' * 3) 'ium' # File "", line 1 # ('un' * 3) 'ium' # ^ # SyntaxError: invalid syntax
Если необходимо объединить переменные или переменную и литерал, используйте знак ‘+’ :
>>> prefix + 'thon' # 'Python'
Лучший и наиболее быстрый (по времени выполнения), а так же менее ресурсозатратный (для ОС) способ объединить список строк — это конечно метод str.join() . Этот метод объединения строк рекомендуется компилятором PyPy (если вдруг захотите ускорить свой код).
# начальная строка >>> line = 'Состав корзины покупателя:' # список строк, которые нужно добавить >>> lst_line = ['- картошка', '- морковь', '- лук', '- чеснок', '- свекла'] # вставляем начальную строку по индексу 0 в список >>> lst_line.insert(0, line) # объединяем список строк по разделителю '\n' >>> rez = '\n'.join(lst_line) >>> print(rez) # Состав корзины покупателя: # - картошка # - морковь # - лук # - чеснок # - свекла
Что бы повторить строку нужное количество раз, необходимо использовать символ умножения * :
>>> '#' * 45 # '#############################################' >>> '-!-' * 15 # '-!--!--!--!--!--!--!--!--!--!--!--!--!--!--!-'
Такое поведение можно использовать, например для подчеркивания строк, выводимых в терминал или текстовый файл. Для этого вычислим длину слова, а затем символ ‘-‘ «умножим» на полученную длину строки:
>>> line = 'Привет мир!' >>> n = len(line) >>> print(f"line>\n'-'*n>") # Привет мир! # -----------
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Преобразование строки в число
- Строку в список, кортеж или множество символов
- Одинарные, двойные и тройные кавычки в строке Python
- Вывод специальных символов в строке Python «как есть»
- Объединение и повторение строк
- Индексирование строк
- Использование срезов строк
- Cрез строки Python от заданного символа/знака до конца строки
- Создание макета для печати базовыми методами строк
- Способы форматирования текстовых строк
- Подсчет повторений слов в тексте, деление строки на список слов
- Удаление слова из строки Python по фрагменту или шаблону
- Удаление пунктуации из строки
- Деление строки по заглавным буквам
- Создание отчетов и писем по шаблонам
Oops! That page can’t be found.
It looks like nothing was found at this location. Maybe try one of the links below or a search?
Practice
- Top 100 Most Liked Data Structures and Algorithms Problems
- Top 50 Classic Data Structures Problems
- Top 25 Algorithms Every Programmer Should Know
Techie Delight 2023 All Rights Reserved.
This website uses cookies. By using this site, you agree to the use of cookies, our policies, copyright terms and other conditions. Read our Privacy Policy. Got it
Как быстро конкатенировать строки в Python
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.
Как вы, наверное, знаете один из принципов в Python: “Должен быть один и только один способ сделать что-либо”. Можете убедиться в этом, выполнив в в интерпретаторе import this (вы увидите Дзен Python). Несмотря на это, иногда вам всё равно приходится выбирать между несколькими способами сделать что-то, и не всегда очевидно, какой способ лучше. Недавно один студент спросил меня, какой способ конкатенации строк в Python самый эффективный. Я решил поделиться результатом своего маленького исследования и с вами.
Для начала вспомним, какие способы объединения строк предоставляет нам Python. Во-первых, это оператор + :
>> 'abc' + 'def' 'abcdef'
Также мы можем использовать оператор % , который, конечно, может использоваться не только для соединения строк, но и для этого тоже:
>>> "%s%s" % ('abc', 'def') 'abcdef'
Есть и ещё более современная замена % — это str.format :
>>> ''.format('abc', 'def') 'abcdef'
Так же, как и % , этот метод гораздо мощнее, чем обычный + , но тем не менее строки соединяют и с его помощью.
Как же мы будем замерять время? В Jupyter (так же известном, как IPython) мы можем использовать магическую команду timeit для запуска кода. Для запуска я подготовил четыре функции, каждая из которых складывает строки разным образом. Исходные строки хранятся в глобальных переменных ( x и y ), а локальная (для каждой функции) переменная z содержит результат сложения. Затем функция возвращает результат.
def concat1(): z = x + y return z def concat2(): z = "%s%s" % (x, y) return z def concat3(): z = "<><>".format(x, y) return z def concat4(): z = "".format(x, y) return z
Конечно concat3() и concat4() фактически одинаковы, но я решил проверить и то, влияет указание порядка строк на скорость или нет. Затем я определил наши глобальные переменные:
x = 'abc' y = 'def'
И запустил наши функции:
%timeit concat1() %timeit concat2() %timeit concat3() %timeit concat4()
Результат оказался следующим:
- concat1: 153 наносекунды;
- concat2: 275 наносекунд;
- concat3: 398 наносекунд;
- concat4: 393 наносекунды.
Здесь мы можем видеть, что concat1() , который использует оператор + , выполняется гораздо быстрее остальных. Это немного расстроило меня, потому что мне очень нравится str.format , однако теперь в задачах, которые требуют огромного количества обработки строк, от него придётся отказаться.
Возможно, такие результаты могут быть связаны с тем, что короткие строки не создаются в Python каждый раз снова, а хранятся в специальной таблице? Давайте попробуем изменить наши глобальные переменные следующим образом:
x = 'abc' * 10000 y = 'def' * 10000
Теперь мы получим следующие результаты:
- concat1: 2.64 микросекунды;
- concat2: 3.09 микросекунды;
- concat3: 3.33 микросекунды;
- concat4: 3.48 микросекунды;
Да, каждый из методов теперь работал гораздо дольше, однако общий результат не изменился — оператор + по прежнему лидирует. Заметим так же, что разница во времени между третьим и четвёртым методом, как и ожидалось, пренебрежимо мала.
После этого я попробовал не объявлять переменные глобальными, а задавать их в теле метода, но на результаты это всё равно не повлияло. Разумеется, можно проводить ещё много разных опытов (например, попробовать сложить больше, чем две строки), однако этого уже достаточно, чтобы иметь примерное представление о скоростях работы различных способов сложения строк в языке Python.
Соединить две строки и вывести резульат
Операция объединения строк по-умному называется конкатенацией. В Python для конкатенации используется оператор + (плюс):
s1 = 'qwertyuiopasd' s2 = 'fghjklzxcvbnm' print(s1 + s2)
qwertyuiopasdfghjklzxcvbnm
Можно положить результат в переменную и вывести уже её:
s1 = 'qwertyuiopasd' s2 = 'fghjklzxcvbnm' s3 = s1 + s2 print(s3)
Отслеживать
ответ дан 31 авг 2017 в 11:20
12.9k 10 10 золотых знаков 41 41 серебряный знак 77 77 бронзовых знаков
Что тут происходит? У тебя истерика?)
31 авг 2017 в 11:42
а как числа складывать?
31 авг 2017 в 15:29
- python
- python-3.x
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.21.1314
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
