该程序生成项目列表的幂集背后的逻辑是什么

What is the logic behind this program for generating the power set of a list of items

我正在阅读这本关于决策树的书,在其中一节中,作者为我们提供了一个生成幂集的代码示例。解释太可怕了,虽然我理解所有操作的语法和含义。我不明白这个算法背后的原因

# generate all combinations of N items
def powerSet(items):
    N = len(items)
    # enumerate the 2**N possible combinations
    for i in range(2**N):
        combo = []
        for j in range(N):
            # test bit jth of integer i
            if (i >> j) % 2 == 1:
                combo.append(items[j])
        yield combo

生成器是迭代大型迭代器的非常有效的方法。

可以调用一次! 它可以通过 'yield' 而不是函数中的 return 使代码 return 许多值,其中 return 一个整个数组,一个生成器一次产生一个值。这需要更少的内存。

产量组合错误生成组合

(2**N) times after