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

目录
  • 1. lcm
  • 2. functools.reduce
  • 3. 实际使用

本篇阅读的代码片段来自于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...) 的代码主要是展现了一种思路。并不会对边缘情况和异常进行检查,背后的原因是为了保持项目的简单性,展示有趣的技术和思维方式。所有的代码片段都假设用户对问题、语言和可能发生的潜在错误有基本的了解,因此不会添加异常处理或参数检查。

到此这篇关于Python 代码实现列表的最小公倍数的文章就介绍到这了,更多相关Python 列表最小公倍数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 数字转化成列表详情

    目录 1. digitize 2. Python判断对象是否可迭代 本篇阅读的代码实现了将输入的数字转化成一个列表,输入数字中的每一位按照从左到右的顺序成为列表中的一项. 本篇阅读的代码片段来自于30-seconds-of-python. 1. digitize def digitize(n): return list(map(int, str(n))) # EXAMPLES digitize(123) # [1, 2, 3] 该函数的主体逻辑是先将输入的数字转化成字符串,再使用map函数将字符

  • Python list列表删除元素的4种方法

    目录 del:根据索引值删除元素 pop():根据索引值删除元素 remove():根据元素值进行删除 clear():删除列表所有元素 在 Python 列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法: 根据元素本身的值进行删除,可使用列表(list类型)提供的 remove() 方法: 将列表中所有元素全部删除,可使用列表(list类型)提供的 clear() 方法. del:根据索引值删除元素 del 是 Pyt

  • Python 列表映射后的平均值

    目录 1.average_by 2.lambda表达式 3.map函数 4.其他类似函数 4.1 max_by 4.2 min_by 4.3 sum_by 本篇阅读的代码片段来自于30-seconds-of-python. 1.average_by def average_by(lst, fn=lambda x: x): return sum(map(fn, lst), 0.0) / len(lst) # EXAMPLES average_by([{ 'n': 4 }, { 'n': 2 },

  • Python列表推导式详情

    目录 1.列表生成式 1.1 案例 2.集合生成式 3.字典生成式 1.列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 语法结构如下: # 普通的生成式 [表达式 for 变量 in 旧列表] # 加条件的生成式 [表达式 for 变量 in 旧列表 if 条件] # if...else条件的生成式 [表达式 if 条件1 else 条件2for 变量 in 旧列表] 1.1 案例 过滤掉名词字母不足4的名字,示

  • Python列表的定义及使用

    目录 1.定义和使用列表 1.1 定义列表 2.1  列表的运算符 2. 访问列表中的值 2.2 列表元素的遍历 3.列表的方法 3.1 添加和删除元素 3.2 元素位置和次数 3.3 元素排序和反转 3.4 小结 4.列表的生成式 5.嵌套的列表 1.定义和使用列表 在Python中,列表是由一系列元素按照特定的顺序构成的数据结构,也就是说列表类型的变量可以存储多个数据,且可以重复. 1.1 定义列表 使用[]字面量语法定义变量,列表中的多个元素使用逗号,进行分割, 示例代码如下: list1

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

    目录 1. lcm 2. functools.reduce 3. 实际使用 本篇阅读的代码片段来自于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) # EXAMP

  • Python代码阅读--列表元素逻辑判断

    目录 1.every 2.some 3.none 1.every def every(lst, fn=lambda x: x): return all(map(fn, lst)) # EXAMPLES every([4, 2, 3], lambda x: x > 1) # True every([1, 2, 3]) # True every 用于判断列表 lst 中的元素是否都符合给定的判断条件 fn . 代码中首先使用 map 返回一个迭代器,该迭代器会将判断条件 fn 应用于所有的列表元素上

  • Python代码实现列表分组计数

    目录 1. count_by 2. 使用字典推导式 3. 使用collections.defaultdict简化代码 本篇阅读的代码片段来自于30-seconds-of-python. 1. count_by def count_by(arr, fn=lambda x: x): key = {} for el in map(fn, arr): key[el] = 1 if el not in key else key[el] + 1 return key # EXAMPLES from math

  • NumPy 与 Python 内置列表计算标准差区别详析

    目录 1 什么是 Numpy 2 NumPy 数组和 Python 内置计算对比 3 函数计算时间装饰器 4 标准差计算公式 5 总结 1 什么是 Numpy NumPy,是 Numerical Python 的简称,用于高性能科学计算和数据分析的基础包,像数学科学工具(pandas)和框架(Scikit-learn)中都使用到了 NumPy 这个包. NumPy 中的基本数据结构是ndarray或者 N 维数值数组,在形式上来说,它的结构有点像 Python 的基础类型——Python列表.

  • python字符串,元组,列表,字典互转代码实例详解

    python字符串,元组,列表,字典互相转换直接给大家上代码实例 #-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type 'str'> {'age': 7, 'name': 'Zara', 'class': 'First'} print type(str(dict)), str(dict) #字典可以转为元组,返回:('age', 'name', 'class

  • python代码实现将列表中重复元素之间的内容全部滤除

    1. 引言 因为在学习遗传算法路径规划的内容,其中遗传算法中涉及到了种群的初始化,而在路径规划的种群初始化中,种群初始化就是先找到一条条从起点到终点的路径,也因此需要将路径中重复节点之间的路径删除掉(避免走回头路),这样子初始种群会比较优越,也能加快算法收敛速度.然后我在搜资料的时候发现,许多的代码都是滤除列表中相同元素的,并没有滤除相同元素中间段的代码,因此就自己写了. 2. 代码部分 我在python程序中把每一条路径用列表表示的,因此每一个列表就是一条路径比如 a = [0,1,3,4,5

  • Python代码实现找到列表中的奇偶异常项

    目录 1.find_parity_outliers 2.class collections.Counter([iterable-or-mapping]) 本篇阅读的代码片段来自于30-seconds-of-python. 1.find_parity_outliers from collections import Counter def find_parity_outliers(nums): return [ x for x in nums if x % 2 != Counter([n % 2

  • Python代码列表求并集,交集,差集

    目录 一.列表求并集 1. union_by 二.列表求交集 1. intersection_by 三.列表求差集 1. difference 2. difference_by 3. symmetric_difference_by 一.列表求并集 实现了两个列表求并集的功能.同时支持使用一个过滤条件函数,列表中所有元素根据该条件求取并集,并集中是两个列表的原始元素. 本篇阅读的代码片段来自于30-seconds-of-python. 1. union_by def union_by(a, b,

  • python中数字列表转化为数字字符串的实例代码

    目录 1. python中数字组成的列表转化为字符串或者一串数字 2.python中把数字组成的列表转化为字符串列表 3.Python中把字符组成的列表转化为数字 4.Python中把一串数字字符转化为单个字符列表或者数字列表 5. Python中把字符串列表转化为数字列表 参考文章: 总结 1. python中数字组成的列表转化为字符串或者一串数字 f=[1,2,3,4] num=len(f) m='' #建立空字符串 for i in range(num): x=str(f[i]) m=m+

  • Python简单删除列表中相同元素的方法示例

    本文实例讲述了Python简单删除列表中相同元素的方法.分享给大家供大家参考,具体如下: 去除列表中重复的元素,非常简单,直接上代码: a = [11, 21, 3, 4, 3, 2, 5] b = list(set(a)) print(a) print(b) 运行结果: E:\Program\Python>d.py [11, 21, 3, 4, 3, 2, 5] [2, 3, 4, 5, 11, 21] 看到了吗,结果中确实没有了重复的元素.但是,同时,结果中的元素被按从小到大进行了排序! P

随机推荐