python 二维列表 组合_如何在python中从二维列表中获取所有可能的项目组合?

这里有一个使用递归的解决方案,combs_r有accum摘要head(行中的下一个列表)来生成一个更胖的{},然后用tail(剩余列表)和现在更胖的累加器accum0调用自己(“递归”)。在

由于每次调用combs_r都会添加一个新的名称空间,因此可能会占用大量内存,直到所有调用都解除为止。在Python内部更熟悉的人可能会对此发表评论。在

学习序言是值得的,伊荷。在def combs(ll):

if len(ll) == 0:

return []

if len(ll) == 1:

return [[item] for item in ll[0]]

elif len(ll) == 2:

return lmul(ll[0], [[item] for item in ll[1]])

else:

return combs_r(ll[1:], ll[0])

def combs_r(ll, accum):

head = ll[0]

tail = ll[1:]

accum0 = []

accum0 = lmul(head, accum)

if len(tail) == 0:

return accum0

else:

return combs_r(tail, accum0)

def lmul(head, accum):

accum0 = []

for ah in head:

for cc in accum:

#cc will be reused for each ah, so make a clone to mutate

cc0 = [x for x in cc]

cc0.append(ah)

accum0.append(cc0)

return accum0

sampleip = [['a','b','c'],[1,2], ['A', 'B']]

sampleip2 = [['a','b','c'],[1,2]]

sampleip1 = [['a','b','c']]

sampleip0 = []

print combs(sampleip0)

print combs(sampleip1)

print combs(sampleip2)

print combs(sampleip)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值