Корректный вывод с lambda
Скажите, как можно с помощью lambda указать, по какому именно условию мы должны выводить число.
К примеру есть список чисел и контрольное число:
Нужно вывести сумму попарных элементов, сумма которых меньше контрольного числа по возрастанию, а также сами эти числа также в порядке возрастания
listt = [10, 7, 2, 12, 76, 100, 324]
control_number = 30
# вывести последовательно сумму двух элементов, если эта сумма меньше контрольного числа
# Для первых двух чисел: 10 + 7 = 17, a 17 < 30, значит число 17 удовлетворяет условию.
# 7 + 2 = 9, a 9 < 30, 9 удовлетворяет
# 2 + 12 = 14, a 14 < 30, 14 удовлетворяет условию
# 12 + 76 = 88, a 88 > 30, 88 не удовлетворяет условию
# Нужно вывести сумму попарных элементов, сумма которых меньше контрольного числа по возрастанию, а также сами эти числа также в порядке возрастания:
# 9 14 17
# 2 7 10 12
Вывод:
9 14 17
Вопрос: как сделать так, чтобы выводилось не подряд 17 9 14, а по возрастанию?
P.S. Без использования списка и метода списков, чисто с лямбда
Ответы (2 шт):
Автор решения: Александр
→ Ссылка
Короче я не знаю зачем тут нужна lambda)
list_numbers = [10, 7, 2, 12, 76, 100, 324]
CONTROL_NUMBER = 30
def function(numbers: list, control_number: int):
for x, y in zip(list_numbers, range(len(list_numbers))):
# print(x, list_number[y-1])
s = sum((x, list_numbers[y-1]))
if s < control_number:
yield s
def main():
result = sorted(set(function(list_numbers, CONTROL_NUMBER)))
print(result)
if __name__ == '__main__':
main()
Автор решения: vp_arth
→ Ссылка
Без методов списка, но со списком.
Используем heapq heappush/heappop:
from heapq import heappush, heappop
listt = [10, 7, 2, 12, 76, 100, 324]
control_number = 30
h = []
for i in range(len(listt)-1):
a, b = listt[i], listt[i+1]
ab = a + b
if ab < control_number:
heappush(h, ab)
for _ in range(len(h)):
print(heappop(h), end=' ') # 9 14 17
print()
Почти без списков, и с лямбдами!
from functools import reduce
solution = sorted(filter(
lambda x: int(x) < control_number,
reduce(
lambda data,x: {'sums': data['sums'] + (data['prev']+x,) if data['prev'] is not None else tuple(), 'prev': x},
listt,
{'sums': tuple(), 'prev': None}
)['sums']
))
print(' '.join(map(str, solution)))