乐趣区

关于python:Python代码阅读第3篇列表的最小公倍数

本篇浏览的代码实现了计算列表中元素的最小公倍数的性能。

本篇浏览的代码片段来自于 30-seconds-of-python(https://github.com/30-seconds…)。

lcm

from functools import reduce
from math import gcd

def lcm(numbers):
  return reduce((lambda x, y: int(x * y / gcd(x, y))), numbers)

# EXAMPLES
lcm([12, 7]) # 84
lcm([1, 3, 4, 5]) # 60

两个数的最大公约数和最小公倍数满足如下公式:

lcm(a, b) * gcd(a, b) = abs(a * b)

而对于两个以上数据的列表时,只须要将任意两个数的最小公倍数和剩下的其余数字持续计算最小公倍数即可。也就是说:

lcm(a, b, c, ...) = lcm(lcm(a, b), c, ...)

因而咱们应用 functools.reduce 函数对列表进行迭代。

functools.reduce

functools.reduce(function, iterable[, initializer])

reduce函数中的第一个参数是函数 function,它承受两个参数。reduce 函数将 function 累积的利用在第二个参数,iterable,可迭代的对象上。function应用可迭代对象的前两个值作为输出参数,并将返回值和可迭代对象的下一个值作为 function 的输出参数进行下一次迭代,直到用尽可迭代对象的所有值。例如以下的例子:

# ((((1+2)+3)+4)+5)
reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])

reduce函数大抵相当于:

def reduce(function, iterable, initializer=None):
    it = iter(iterable)
    if initializer is None:
        value = next(it)
    else:
        value = initializer
    for element in it:
        value = function(value, element)
    return value

理论应用

下面的代码片段是展现了 Python 一种应用办法。仔细的同学能够看进去,如果要投入理论生产利用,lcm函数是有一些问题的,次要是两点,一是异样解决,包含除零等;另一个是最小公倍数都是正整数,而该函数的返回值可能呈现正数。

30-seconds-of-python(https://github.com/30-seconds…) 的代码次要是展示了一种思路。并不会对边缘状况和异样进行查看,背地的起因是为了放弃我的项目的简略性,展现乏味的技术和思维形式。所有的代码片段都假如用户对问题、语言和可能产生的潜在谬误有根本的理解,因而不会增加异样解决或参数查看。

退出移动版