sequence1 + sequence2
sequence1
и sequence2
- последовательность. Могут быть list
, str
, tuple
и т. д.Операция позволяет объединить/сложить последовательности одного типа.
В результате произойдет объединение/конкатенация последовательностей sequence1
и sequence2
. Можно еще сказать так, произойдет сложение элементов последовательности sequence1
с элементами последовательности sequence2
. Объединение неизменяемых последовательностей всегда приводит к созданию нового объекта.
Если объединяемые последовательности разного типа, то поднимается исключение TypeError
.
Примечание 1: Диапазоны
range
не поддерживают конкатенацию/объединение последовательностей, т. к. последовательности элементов в них следуют определенным шаблонам.Примечание 2: Для того, что бы объединить множество
set
с последовательностью или другим множеством, необходимо использовать специально предназначенный для этого методsets.union(*others)
.
>>> x = [0, 1, 2, 3, 4, 5] >>> y = [6, 7, 8, 9, 10, 11, 12] >>> x + y # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] >>> y + x # [6, 7, 8, 9, 10, 11, 12, 0, 1, 2, 3, 4, 5] >>> x = 'Hello' >>> y = 'World' >>> x + y # 'HelloWorld' >>> y + x # 'WorldHello' # Разные типы последовательностей y = (1, 5, 9) >>> x + y # Traceback (most recent call last): # File "<stdin>", line 1, in <module> # TypeError: must be str, not tuple
Замечания к операции объединение/конкатенация последовательностей:
Объединение неизменяемых последовательностей всегда приводит к созданию нового объекта. Это означает, что построение последовательности путем повторной объединения/конкатенации будет иметь квадратичную стоимость выполнения в общей длине последовательности. Чтобы получить линейную стоимость выполнения, необходимо переключиться на один из следующих вариантов:
str
можно построить список строк и в конце использовать str.join()
для их объединения, либо писать в io.StringIO
и получить его значение по завершении.bytes
можно аналогичным образом использовать bytes.join()
или io.BytesIO
или можно сделать объединение/конкатенацию на месте с объектом bytearray
. Объекты bytearray
являются изменяемыми и имеют эффективный механизм перераспределения.