lambda python, map, использование как замена цикла for

Есть такой код, который должен выводить остатки от деления каждого элемента одного списка на каждый элемент другого списка:

nums = [6, 63, 10, 27, 10, 4, 7]
ost = [3, 7, 9]
x = list(map(lambda x,y: x%y, nums, ost))

по итогу, что делает данный код: он находит остаток от деления первого элемента списка nums на первый элемент списка ost, потом остаток от деления второго элемента списка nums на второй элемент списка ost, а мне нужно, чтобы он нашел остатки так: взял первый элемент списка nums, и нашел остатки от деления с КАЖДЫМ ЭЛЕМЕНТОМ списка ost, к примеру: берет 6 из списка nums, и начинает находить остатки: 6 % 3, 6 % 7, 6 % 9, и потом следующий элемент. Как без цикла for сделать в одну строку?

P.S. Что делает код:

6 % 3
63 % 7
10 % 9

Что должен делать:

6 % 3
6 % 7
6 % 9
63 % 3
63 % 7
63 % 9

и т.д..


Ответы (2 шт):

Автор решения: Рустам Рысаев

Сделать это в одну строку и без for (но с вложенными итерациями, как в map` можно так:

nums = [6, 63, 10, 27, 10, 4, 7]
ost = [3, 7, 9]
result = list(map(lambda pair: pair[0] % pair[1], [(n, o) for n in nums for o in ost]))
→ Ссылка
Автор решения: Amgarak

Это рекомбинация идеи MBo из комментариев (itertools.product) и ответа Рустам Рысаев:

from itertools import product

nums = [6, 63, 10, 27, 10, 4, 7]
ost = [3, 7, 9]

result = list(map(lambda pair: pair[0] % pair[1], product(nums, ost)))

print(result)

Вывод:

[0, 6, 6, 0, 0, 0, 1, 3, 1, 0, 6, 0, 1, 3, 1, 1, 4, 4, 1, 0, 7]
→ Ссылка