32

Как объединить два списка в Python?

21

Проблема: Как объединить два списка в Python?

Я хочу объединить два списка, но не знаю, как это сделать. У меня есть следующий код:

listone = [1, 2, 3]
listtwo = [4, 5, 6]

Я ожидаю получить следующий результат:

>>> joinedlist
[1, 2, 3, 4, 5, 6]

Как правильно объединить эти два списка?

5 ответ(ов)

2

Вы можете использовать множества (sets) для получения объединённого списка уникальных значений. Вот пример кода на Python:

mergedlist = list(set(listone + listtwo))

Этот код объединяет два списка listone и listtwo, затем преобразует их в множество, что автоматически удаляет дубликаты, и в конце снова преобразует множество в список. В результате вы получите список, содержащий только уникальные элементы из обоих исходных списков.

0

Если вы хотите объединить два отсортированных списка в один отсортированный список, вы можете использовать функцию merge из библиотеки heapq.

Вот пример кода:

from heapq import merge

a = [1, 2, 4]
b = [2, 4, 6, 7]

print(list(merge(a, b)))

Этот код объединит списки a и b и выведет результат в отсортированном виде. Обратите внимание, что merge работает с любым количеством отсортированных списков, поэтому вы можете передавать и больше списков, если это необходимо.

0

Стоит отметить, что функция itertools.chain принимает переменное количество аргументов:

>>> l1 = ['a']; l2 = ['b', 'c']; l3 = ['d', 'e', 'f']
>>> [i for i in itertools.chain(l1, l2)]
['a', 'b', 'c']
>>> [i for i in itertools.chain(l1, l2, l3)]
['a', 'b', 'c', 'd', 'e', 'f']

Если на вход подается итерируемый объект (кортеж, список, генератор и т.д.), то можно использовать метод класса from_iterable:

>>> il = [['a'], ['b', 'c'], ['d', 'e', 'f']]
>>> [i for i in itertools.chain.from_iterable(il)]
['a', 'b', 'c', 'd', 'e', 'f']

Таким образом, chain удобен как для объединения отдельных элементов, так и для работы с итерируемыми объектами.

0

Этот вопрос напрямую касается объединения двух списков. Однако он достаточно популярен в поисковых системах, даже когда вы ищете способ объединения множества списков (включая случай, когда вы объединяете ноль списков).

Я считаю, что лучшим вариантом будет использование генераторов списков:

>>> a = [[1,2,3], [4,5,6], [7,8,9]]
>>> [x for xs in a for x in xs]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Вы также можете создать генераторы:

>>> map(str, (x for xs in a for x in xs))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

Старый ответ

Рассмотрите более общий подход:

from functools import reduce

a = [[1,2,3], [4,5,6], [7,8,9]]
reduce(lambda c, x: c + x, a, [])

Это выведет:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

Обратите внимание, что это также работает корректно, когда a равно [] или [[1,2,3]].

Однако это можно сделать более эффективно с помощью модуля itertools:

import itertools

a = [[1,2,3], [4,5,6], [7,8,9]]
list(itertools.chain(*a))

Если вам не нужен список, а просто итерируемый объект, вы можете опустить вызов list().

Обновление

Альтернативный подход, предложенный Патриком Коллинзом в комментариях, также может вам подойти:

sum(a, [])
0

Вы можете просто использовать оператор + или += следующим образом:

a = [1, 2, 3]
b = [4, 5, 6]

c = a + b

Или:

c = []
a = [1, 2, 3]
b = [4, 5, 6]

c += (a + b)

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

c = list(set(a + b))
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь