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]))
Это рекомбинация идеи 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]