接受列表作为gcd(x,y)的输入

时间:2016-02-15 16:22:10

标签: python python-3.x

我正在尝试编写一个接受list作为gcd函数参数的函数。这样的事情会起作用吗?

def find_my_gcd(a_list):
    def gcd (x,y):
        while y!=0:
             x,y=y,x%y
        return x

现在,如何让我的gcd功能单步执行列表,即a_list=[12,24,18,6],遍历gcd(12,24)gcd(12,18)gcd(12,6)并返回单一价值。

1 个答案:

答案 0 :(得分:0)

你必须将当前值保存在变量中,并将其与列表中的下一个值一起使用,如下所示

def find_my_gcd(a_list):
    def gcd (x,y):
        while y!=0:
            x,y=y,x%y
        return x
    acum = a_list[0]
    for e in a_list[1:]:
        acum = gcd(acum,e)
    return acum

你也可以使用reduce来保持累积效果

def find_my_gcd(a_list):
    def gcd (x,y):
        while y!=0:
            x,y=y,x%y
        return x
    return reduce(gcd,a_list)

你也可以在python 3.5+的math.gcd库中找到gcd,而以前的版本中的gcd在fractions.gcd库中,所以你的函数可以简化为

from functools import reduce
from math import gcd # from fractions import gcd in 3.4 or previous

def find_my_gcd(a_list):
    return reduce(gcd,a_list)