Объдинить 2 списка
Как объединенить 2 списка в один?
L1 = [0, 5]
L2 = [0, 10, 20]
Должно получиться:
L3 = [[0, 0], [0, 10], [0, 20], [5, 0], [5, 10], [5, 20]]
Ответы (2 шт):
l1 = [0, 5]
l2 = [0, 10, 20]
Первый вариант (самое простое решение, через вложенные циклы):
def combinate1(l1, l2):
l3 = []
for i in range(len(l1)):
for j in range(len(l2)):
l3.append([l1[i], l2[j]])
return l3
Второй вариант (однострочный вариант предыдущего), через списковое включение:
def combinate2(l1, l2):
return [[x, y] for i in l1 for j in l2]
Третий вариант (с помощью модуля itertools):
from itertools import product
def combinate3(l1, l2):
return list(product(l1, l2))
Вывод:
[[0, 0], [0, 10], [0, 20], [5, 0], [5, 10], [5, 20]]
Подобная комбинация двух списков в математике называется "прямым произведением" (Cartesian product).
Это не объединение, это декартово произведение. Декартово произведение списков — это набор всех возможных комбинаций элементов из каждого списка. Декартово произведение списков можно сделать с помощью модуля itertools, который предоставляет функцию product. Эта функция возвращает декартово произведение входных итерабельных объектов как кортежи, а нужно получить список списков, немного поправим и получим:
import itertools
result = list(map(list,itertools.product([0,5],[10,20,30])))
print(result)
[[0, 10], [0, 20], [0, 30], [5, 10], [5, 20], [5, 30]]