2016-02-15 40 views
0

我想寫一個函數,接受列表作爲我的gcd函數的參數。會有這樣的工作嗎?接受列表作爲輸入到gcd(x,y)

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)並返回一個值。

回答

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保持acumulated你

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) 

,你也可以在蟒蛇3.5+和以前版本中math.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)