黑马程序员技术交流社区

标题: python使用匿名函数实现多个列表的排列组合 [打印本页]

作者: 小江哥    时间: 2019-5-13 14:38
标题: python使用匿名函数实现多个列表的排列组合
之前做数据的时候碰到一个需求,需要把两个或者多个列表里的元素做排列组合.
例如:
[Python] 纯文本查看 复制代码
list1 = [1, 2]
list2 = [3, 4]
list3 = [5, 6]
def fn(lists):
        # 省略处理过程
        ...
       
res = fn([list1, list2, list3])
print(res)
# 最终结果为:
['1,3,5', '1,3,6', '1,4,5', '1,4,6', '2,3,5', '2,3,6', '2,4,5', '2,4,6']

当时很头疼,这个听起来很简单的需求让我苦恼了一上午,吃中午饭时我突然灵机一动想起了python里的高阶函数之reduce,瞬间就开窍了,草草吃完饭然后花了几分钟写出了这个需求,现在放在这里与诸君共勉.
[Python] 纯文本查看 复制代码
def lists_combination(lists, code=''):
    '''输入多个列表组成的列表, 输出其中每个列表所有元素可能的所有排列组合
    code用于分隔每个元素'''
    try:
        import reduce
    except:
        from functools import reduce
        
    def myfunc(list1, list2):
        return [str(i)+code+str(j) for i in list1 for j in list2]
    return reduce(myfunc, lists)

至此,完美解决了这个需求,诸君有类似的需求都可以拿走些微修改一下满足自己的需求.

你以为这就完了?
当然没完,基于程序员精益求精的精神,(能写一行绝不写两行),吃完晚饭没事干的我,把他压缩成了一行!
嘿嘿嘿~
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)
end~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2