Объдинить 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).

→ Ссылка
Автор решения: Oopss

Это не объединение, это декартово произведение. Декартово произведение списков — это набор всех возможных комбинаций элементов из каждого списка. Декартово произведение списков можно сделать с помощью модуля 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]]
→ Ссылка