7

Как получить конкатенацию двух списков в Python, не изменяя ни один из них?

4

У меня возникла проблема с конкатенацией списков в Python. Я нашел, что единственный способ объединить два списка — это использовать метод list.extend, который изменяет первый список. Есть ли функция для конкатенации, которая возвращает новый список без изменения исходных аргументов?

5 ответ(ов)

11

Да: list1 + list2. Это создаст новый список, который является конкатенацией list1 и list2.

1

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

concatenated_list = list_1 + list_2

Этот код создает новый список concatenated_list, содержащий все элементы из list_1, за которыми следуют все элементы из list_2. Обратите внимание, что этот метод не изменяет исходные списки, а создает новый. Если вам нужно добавить элементы второго списка к первому списку, то можно воспользоваться методом extend:

list_1.extend(list_2)

В этом случае list_1 будет содержать элементы из list_2, и исходный список list_2 останется неизменным.

1

Вы также можете использовать функцию sum, если передадите ей аргумент start:

>>> list1, list2, list3 = [1,2,3], ['a','b','c'], [7,8,9]
>>> all_lists = sum([list1, list2, list3], [])
>>> all_lists
[1, 2, 3, 'a', 'b', 'c', 7, 8, 9]

Это работает в общем случае для любых объектов, которые поддерживают оператор +:

>>> sum([(1,2), (1,), ()], ())
(1, 2, 1)

>>> sum([Counter('123'), Counter('234'), Counter('345')], Counter())
Counter({'1':1, '2':2, '3':3, '4':2, '5':1})

>>> sum([True, True, False], False)
2

С заметным исключением для строк:

>>> sum(['123', '345', '567'], '')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]

В случае строк, вместо sum следует использовать ''.join(seq).

0

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

>>> k = [1, 2, 3] + [4, 7, 9]
>>> k
[1, 2, 3, 4, 7, 9]

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

0

Если у вас есть более двух списков, которые нужно объединить, вы можете использовать функцию reduce из модуля functools в комбинации с оператором сложения add из модуля operator. Например:

import operator
from functools import reduce  # Для Python 3

list1, list2, list3 = [1,2,3], ['a','b','c'], [7,8,9]
result = reduce(operator.add, [list1, list2, list3])
print(result)  # Выведет: [1, 2, 3, 'a', 'b', 'c', 7, 8, 9]

# Либо с уже существующим списком
all_lists = [list1, list2, list3]
result = reduce(operator.add, all_lists)
print(result)  # Выведет: [1, 2, 3, 'a', 'b', 'c', 7, 8, 9]

Обратите внимание, что этот способ не экономит время, так как промежуточные списки по-прежнему создаются. Тем не менее, он удобно подходит, если у вас есть переменное количество списков для объединения, например, при использовании *args.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь