Задача на массив в питоне

Дан массив, например, M = [3,8,2,4] . Как узнать равна ли сумма каких-нибудь двух его элементов числу 12?

Я пыталась так сделать,но выдает ошибку


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

Автор решения: entithat

Берем все комбинации по 2 элемента и суммируем. Потом с помощью any проверяем есть ли хоть одно истинное значение в списке.

from itertools import combinations

M = [3, 8, 2, 4]  
print(any(map(lambda x: sum(x) == 12, combinations(M, 2)))) # True
→ Ссылка
Автор решения: Zhihar

ну тут только методом перебора

потребуется 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]

это самый быстрый вариант, можно немного поизвращаться и использовать библиотечную функцию - сгенерировать уникальные пары из массива и искать среди них суммы - но это дольше

→ Ссылка
Автор решения: Danis

попробуйте так:

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)
→ Ссылка
Автор решения: CrazyElf

Я как обычно добавлю чисто функциональный вариант, хотя с лямбдой было бы и короче:

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)))
→ Ссылка