a = [[1,2,3], [4,5,6]]
res = [(x, y) for i in a for x in i for y in i]
print(res)
Немного усложнил код чтобы понятней была логика чтения и написаний таких конструкций.
В начале всегда идёт объявление переменных, значения которых желаем получить, затем после каждого
for объявляется новая переменная значение которой присваивается из итерируемых значений после
in если название переменной == одной из изначально объявленных то значение добавится туда сразу если нет и переменная после
for тоже итерируемая то по ней снова можно итерироватся