Python 使用max和lambda查找列表元素的GCD时出现问题

Python 使用max和lambda查找列表元素的GCD时出现问题,python,lambda,max,Python,Lambda,Max,这是我的代码,我使用lambda函数作为键来查找结果列表的最大值,但它不起作用。我不想使用任何其他内置函数或方法,只要修改键(如果可能)。这个列表的结果应该是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.app

这是我的代码,我使用lambda函数作为键来查找结果列表的最大值,但它不起作用。我不想使用任何其他内置函数或方法,只要修改键(如果可能)。这个列表的结果应该是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]))
将密钥更改为:

您在场景find_gcd[12,24,6,18]中的结果如下:

我们在结果中有相同数量的1、2、3和6,如您所见。两者都有4次出现。但我们想要最好的


注意:对于这些问题,我们可以使用两元素元组。出现次数的第一个元素,例如:数字1出现4次,第二个元素是数字本身。在4,1和4,6之间,4,6更大,它将返回。

您的代码返回最大出现次数的数字。1除以所有数字,因此返回1。因此,我们将多个两元素元组传递给max函数,以选择最大值?我知道4,6是lambda生成的所有元组中最大的元组,但为什么返回4,6的第二个元素而不是第一个元素?@Sherafati,这就是key in max和类似函数的工作方式。max use key作为一个函数,用于查找max元素并在此基础上返回结果中的元素
max(result, key = lambda x : (result.count(x), x))
[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 6, 6, 6, 6, 8, 9, 12, 12, 18, 24]