python使用匿名函数实现多个列表的排列组合

在处理数据需求时,遇到将多个列表元素进行排列组合的问题。通过使用Python的reduce和lambda函数,成功解决了这一问题,实现了简洁高效的代码。不仅如此,进一步优化,将解决方案压缩成一行代码,体现程序员追求卓越的精神。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做数据的时候碰到一个需求,需要把两个或者多个列表里的元素做排列组合.
例如:

[Python] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

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] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

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~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值