Python逆变发电机组

2024-04-25 21:25:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个反向发电机组发电机,一个发电机,返回发电机组从最大到最小。在

这是一个标准的发电机组发电机(见this问题):

from itertools import chain, combinations
def powerset_generator(i):
    for subset in chain.from_iterable(combinations(i, r) for r in range(len(i)+1)):
        yield list(subset)

这就产生了:

^{pr2}$

我正在努力:

[1, 2, 3]
[1, 2]
[1, 3]
[2, 3]
[1]
[2]
[3]
[]

有没有办法把发电机倒过来让它从后面工作?在


Tags: infromimportchainfor标准defthis
2条回答

您可以设置标志并反转范围:

def powerset_generator(it, rev=False):
    rn = range(len(it), 0, -1) if rev else range(1, len(it)+1)
    for subset in chain.from_iterable(combinations(it, r) for r in rn):
        yield list(subset)

使用Python3,您还可以使用yield from代替chain,并使用map列出我认为读起来更好的列表:

^{pr2}$

如果需要空列表,请相应地设置开始和停止:

In [3]: list(powerset_generator([1, 2, 3]))
Out[3]: [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]

In [4]: list(powerset_generator([1, 2, 3],True))
Out[4]: [[1, 2, 3], [1, 2], [1, 3], [2, 3], [1], [2], [3]]

你可以从更大的子集开始。反转选择大小的范围,如下所示:

from itertools import chain, combinations
def powerset_generator(i):
    for subset in chain.from_iterable(combinations(i, r) for r in range(len(i), -1, -1)):
        yield list(subset)

相关问题 更多 >