python互相转换组合_python将组合函数转换为gen

sum(iterable, [])不创建列表列表。它实际上是把东西弄平了。在

yield (sum(...))在这一行中,您只生成一个项目,所有组合的扁平列表。在

对于python2.X,sum([(map(list, combinations(arr, i))) ...])可以工作,但是在python3.X中map不再返回列表。相反,它返回一个map对象。因此,如果python3.X上的任何人只需将其转换为list(map(.....)),以便在3.X上运行

我想你真正想要的是这样的:from itertools import combinations

def makeCombos(arr):

for i in range(len(arr) + 1):

for combo in map(list, combinations(arr, i)):

yield combo

#Or call next

combos = makeCombos([1, 2, 3, 4, 5])

for combo in combos:

print combo

单行程序注释的另一种选择:

我们可以返回一个生成器对象,然后像使用yield一样循环使用。在

例如-

^{pr2}$

至于这是“Python”,我真的不会这么说。实际上我更喜欢嵌套的forloop,它的可读性要高得多。在

尽管如此,我们仍然可以尝试通过一些“技巧”来清理/压缩它from itertools import combinations as cs #or some other name)

def makeCombos(arr):

return (c for i in range(len(arr) + 1) for c in map(list, cs(arr, i)))

但是,现在您已经失去了所有的可读性,这看起来就像在Perl中看到的一样。(恐怖!)在

输出:[]

[1]

[2]

[3]

[4]

[5]

[1, 2]

[1, 3]

[1, 4]

[1, 5]

[2, 3]

[2, 4]

[2, 5]

[3, 4]

[3, 5]

[4, 5]

[1, 2, 3]

[1, 2, 4]

[1, 2, 5]

[1, 3, 4]

[1, 3, 5]

[1, 4, 5]

[2, 3, 4]

[2, 3, 5]

[2, 4, 5]

[3, 4, 5]

[1, 2, 3, 4]

[1, 2, 3, 5]

[1, 2, 4, 5]

[1, 3, 4, 5]

[2, 3, 4, 5]

[1, 2, 3, 4, 5]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值