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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
asp如何获知Connection对象更多的信息?
详解python列表(list)的使用技巧及高级操作
python 实现矩阵按对角线打印
![](https://img.aspxhome.com/file/2023/5/75085_0s.jpg)
thinkphp 多表 事务详解
python面向对象版学生信息管理系统
![](https://img.aspxhome.com/file/2023/8/87638_0s.jpg)
析构函数与php的垃圾回收机制详解
Python如何通过变量ID得到变量的值
![](https://img.aspxhome.com/file/2023/4/65884_0s.jpg)
python等间距取值方式
如何使用FSO修改文件夹的名称
JavaScript 全半角转换
python基于phantomjs实现导入图片
pandas计算最大连续间隔的方法
![](https://img.aspxhome.com/file/2023/7/104397_0s.jpg)
python中split方法用法分析
Jquery中Ajax 缓存带来的影响的解决方法
Pytorch中的variable, tensor与numpy相互转化的方法
![](https://img.aspxhome.com/file/2023/5/101625_0s.png)
Python打印“菱形”星号代码方法
![](https://img.aspxhome.com/file/2023/5/73005_0s.png)