Python 代码实现列表的最小公倍数

作者:Felix 时间:2021-08-11 05:15:24 

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

1. 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函数对列表进行迭代。

2. 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

3. 实际使用

上面的代码片段是展示了Python一种使用方法。细心的同学可以看出来,如果要投入实际生产应用,lcm函数是有一些问题的,主要是两点,一是异常处理,包括除零等;另一个是最小公倍数都是正整数,而该函数的返回值可能出现负数。

30-seconds-of-python(https://github.com/30-seconds... ) 的代码主要是展现了一种思路。并不会对边缘情况和异常进行检查,背后的原因是为了保持项目的简单性,展示有趣的技术和思维方式。所有的代码片段都假设用户对问题、语言和可能发生的潜在错误有基本的了解,因此不会添加异常处理或参数检查。

来源:https://segmentfault.com/a/1190000040627996

标签:Python,列表,最小公倍数
0
投稿

猜你喜欢

  • asp如何获知Connection对象更多的信息?

    2009-11-23 20:53:00
  • 详解python列表(list)的使用技巧及高级操作

    2021-05-12 15:26:47
  • python 实现矩阵按对角线打印

    2022-08-01 02:01:07
  • thinkphp 多表 事务详解

    2023-07-08 05:43:36
  • python面向对象版学生信息管理系统

    2022-07-23 02:16:57
  • 析构函数与php的垃圾回收机制详解

    2023-11-14 11:27:34
  • Python如何通过变量ID得到变量的值

    2023-01-22 22:35:56
  • python等间距取值方式

    2022-03-15 23:19:26
  • 如何使用FSO修改文件夹的名称

    2008-10-11 14:24:00
  • JavaScript 全半角转换

    2010-02-04 17:14:00
  • python基于phantomjs实现导入图片

    2023-07-18 23:39:42
  • pandas计算最大连续间隔的方法

    2022-05-23 12:05:21
  • python中split方法用法分析

    2022-05-24 23:34:51
  • Jquery中Ajax 缓存带来的影响的解决方法

    2011-05-21 16:14:00
  • Pytorch中的variable, tensor与numpy相互转化的方法

    2021-08-16 13:59:50
  • Python打印“菱形”星号代码方法

    2023-02-05 17:34:42
  • pytorch显存一直变大的解决方案

    2021-03-03 00:03:09
  • 链接与文本标签们

    2008-04-04 18:07:00
  • Python 实现某个功能每隔一段时间被执行一次的功能方法

    2021-11-14 09:57:25
  • 在python中按照特定顺序访问字典的方法详解

    2023-02-09 07:14:34
  • asp之家 网络编程 m.aspxhome.com