Задача на массив в питоне
Дан массив, например, M = [3,8,2,4] . Как узнать равна ли сумма каких-нибудь двух его элементов числу 12?
Ответы (4 шт):
Берем все комбинации по 2 элемента и суммируем. Потом с помощью any проверяем есть ли хоть одно истинное значение в списке.
from itertools import combinations
M = [3, 8, 2, 4]
print(any(map(lambda x: sum(x) == 12, combinations(M, 2)))) # True
ну тут только методом перебора
потребуется 2 цикла - первый пройдет с первого элемента до предпоследнего, а второй (вложенный в первый) со следующего от текущего для первого цикла элемента до последнего
складываем 2 элемента из 2 циклов и сравниваем
M = [3,8,2,4]
for i in range(len(M) - 1):
for j in range(i + 1, len(M)):
if M[i] + M[j] == 12:
print(f"{M[i]} + {M[j]} = 12")
ну или в однострочном варианте:
res = [(M[i], M[j]) for i in range(len(M) - 1) for j in range(i + 1, len(M)) if M[i] + M[j] == 12]
это самый быстрый вариант, можно немного поизвращаться и использовать библиотечную функцию - сгенерировать уникальные пары из массива и искать среди них суммы - но это дольше
попробуйте так:
def f(arr):
for el in arr:
if 12 - el in arr:
print(el, 12 - el)
также по совету Zhihar можно использовать множество
def f(arr):
arr = set(arr)
for el in arr:
if 12 - el in arr:
print(el, 12 - el)
Я как обычно добавлю чисто функциональный вариант, хотя с лямбдой было бы и короче:
from itertools import combinations
from operator import eq
from functools import partial
M = [3, 8, 2, 4]
print(any(map(partial(eq, 12), map(sum, combinations(M, 2)))))
Хотя на самом деле можно и без лямбды и без лишних библиотек (но как бы с циклом):
from itertools import combinations
M = [3, 8, 2, 4]
print(any(sum(x) == 12 for x in combinations(M, 2)))
