Как получить конкатенацию двух списков в Python, не изменяя ни один из них?
У меня возникла проблема с конкатенацией списков в Python. Я нашел, что единственный способ объединить два списка — это использовать метод list.extend
, который изменяет первый список. Есть ли функция для конкатенации, которая возвращает новый список без изменения исходных аргументов?
5 ответ(ов)
Да: list1 + list2
. Это создаст новый список, который является конкатенацией list1
и list2
.
В 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
останется неизменным.
Вы также можете использовать функцию 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)
.
Вы всегда можете создать новый список, который будет результатом сложения двух списков:
>>> k = [1, 2, 3] + [4, 7, 9]
>>> k
[1, 2, 3, 4, 7, 9]
Списки являются изменяемыми последовательностями, поэтому имеет смысл модифицировать оригинальные списки, используя методы extend
или append
.
Если у вас есть более двух списков, которые нужно объединить, вы можете использовать функцию 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
.
Как объединить два списка в Python?
Как объединить два списка в Python?
Импорт нескольких CSV-файлов в pandas и объединение в один DataFrame
Как изменить порядок столбцов в DataFrame?
Как проверить тип NoneType в Python?