python实现多列表组合算法

为解决生成两位字母的所有组合的数学问题,实现本程序的设计。为有同样需要的朋友提供帮助。

问题提出

  • 生成以字母开头的两位字母数字组合
  • 例如
    1
    2
    3
    4
    5
    #已知
    list1=['a','b']
    list2=['a','b','1','2']
    #目标
    list3=['aa','ab','a1','a2','ba','bb','b1','b2']

问题解决

  • 正是有人不懈的奋斗和无私的奉献,才使得科技不断地进步,向那些提供共享知识的人,致敬
  • 能分享,能开源的科技人,值得赞扬
  • 网上一位牛人,设计了一个特别好的程序,直接拿来用了,表示感谢。
    1
    2
    3
    from functools import reduce
    fn = lambda x, code=',': reduce(lambda x, y: [str(i)+code+str(j) for i in x for j in y], x)
    # 直接调用fn(lists, code)

特别说明

  • 给出的方案中不仅仅局限于两个列表,可以是多个列表
  • 基于应用驱动的目的,本程序将应用于生成字典,这也是研究这个问题的初衷

用到的reduce函数

描述

reduce() 函数会对参数序列中元素进行累积。函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

语法

reduce() 函数语法:reduce(function, iterable[, initializer])

参数

  • function — 函数,有两个参数
  • iterable — 可迭代对象
  • initializer — 可选,初始参数
  • 返回值:返回函数计算结果。

实例

1
2
3
4
5
6
7
>>>def add(x, y) :            # 两数相加
... return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15

更多的python高阶函数

饮水思源