Задача Питон Генераторы
Написал такой код. Нужно найти числа, которые после попарного умножения дают 56. Сказали, что код верный, но некрасивый выход из цикла. Как его можно реализовать с помощью генератора?
list_1 = [2, 5, 7, 10]
list_2 = [3, 8, 4, 9]
to_find = 56
can_continue = True
for x in list_1:
for y in list_2:
result = x * y
print(x, y, result)
if result == to_find:
print('Found!!!')
can_continue = False
break
if not can_continue:
break
Ответы (3 шт):
Автор решения: day383
→ Ссылка
to_find = 56
def gen():
list_1 = [2, 5, 7, 10]
list_2 = [3, 8, 4, 9]
for x in list_1:
for y in list_2:
yield x, y, x * y
for x, y, result in gen():
print(x,y,result)
if result == to_find:
print('Found!!!')
break
Автор решения: GUIMish
→ Ссылка
Можно это реализовать таким способом:
list_1 = [2, 5, 7, 10];
list_2 = [3, 8, 4, 9];
to_find = 56;
lst = [(x, y, x*y) for x in list_1 for y in list_2];
for itm in lst:
print(itm);
if (itm[2] == to_find):
print('Found!!!');
break;
А если не нужна вся история, то можно сделать таким способом:
list_1 = [2, 5, 7, 10];
list_2 = [3, 8, 4, 9];
to_find = 56;
lst = [(x, y, x*y) for x in list_1 for y in list_2 if (x*y == to_find)];
if (lst):
print(lst[0]);
print('Found!!!');
Автор решения: SergFSM
→ Ссылка
вот тоже вариант с генератором:
list_1 = [2, 5, 7, 10]
list_2 = [3, 8, 4, 9]
to_find = 56
res = next(([x,y] for x in list_1 for y in list_2 if x*y==to_find), None)
if res: print('Found!!!', *res) # Found!!! 7 8