Проблема с поиском GCD для элементов списка с использованием max и lambda - PullRequest
0 голосов
/ 11 апреля 2020

Так что это мой код, и я использовал лямбда-функцию в качестве ключа, чтобы найти максимум в списке результатов, но он не будет работать. Я не хочу использовать какие-либо другие встроенные функции или методы, просто измените KEY, если это возможно. Результат для данного списка должен быть 6, но мой код возвращает 1!

def find_gcd(my_list):
    result = []
    for item in my_list:
        for divs in range(1, item+1):
            if item % divs ==0:
                result.append(divs)

    result.sort()

    x = max(result, key = lambda x : result.count(x))
    return x
print(find_gcd([12, 24, 6, 18]))

1 Ответ

1 голос
/ 11 апреля 2020

измените key на это:

max(result, key = lambda x : (result.count(x), x))

ваш result в вашем сценарии (find_gcd([12, 24, 6, 18])) таков:

[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 6, 6, 6, 6, 8, 9, 12, 12, 18, 24]

у нас такое же количество 1 s, 2 s, 3 s и 6 s в result, как вы видите (оба имеют 4 вхождения). но мы хотим величайший один.

ПРИМЕЧАНИЕ : Мы можем использовать два элемента tuple для решения этой проблемы. первый элемент для номера вхождения (например, 4 вхождения для номера 1), а второй - сам номер. между (4, 1) и (4, 6), (4, 6) больше, и он вернется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...