删除Python 2.7生成器中的梯形图循环(产量)

删除Python 2.7生成器中的梯形图循环(产量),python,python-2.7,generator,yield,Python,Python 2.7,Generator,Yield,我是新手。使用生成器(收益率语句)打印集的所有子集的写入函数。问题是,我不能让它使用收益率,并适用于所有长度的集合,而不仅仅是三个,就像我下面的代码一样。很明显,我可以让它工作4和5分钟,但是梯子变大了,这太可笑了,更不用说像蟒蛇一样优雅了 ABC = ['a', 'b', 'c'] def subsets(group): for i in [group[0], []]: for j in [group[1], []]: for k in [gr

我是新手。使用生成器(收益率语句)打印集的所有子集的写入函数。问题是,我不能让它使用收益率,并适用于所有长度的集合,而不仅仅是三个,就像我下面的代码一样。很明显,我可以让它工作4和5分钟,但是梯子变大了,这太可笑了,更不用说像蟒蛇一样优雅了

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

def subsets(group):
    for i in [group[0], []]:
        for j in [group[1], []]:
            for k in [group[2], []]:
                yield filter(None, [i, j, k])

for element in subsets(ABC):
    print element
输出(此3项列表)应为:

['a', 'b', 'c']
['a', 'b']
['a', 'c']
['a']
['b', 'c']
['b']
['c']
[]

简单地说:循环使用
range(1,len(ABC)+1)
并使用
itertools.combinations
。谢谢,但重点是使用生成器,我正在学习这些东西。
def subsets(group):对于range(1,len(group)+1)中的计数器:对于itertools中的子集。combinations(group,counter):生成子集
?这就是我们的方法,用
yield
而不是
print
,制作了一个漂亮的小生成器。itertools模块背后的逻辑对我来说是隐藏的。我需要写这个代码w/o导入,这是本课的重点。我不能确定这一点,我想让好人帮我看看我在做那个可怕的梯子时做错了什么,这是我无法避免的。我试图用一个变量更改“[group[0],][]”中的索引,但我不知道该生成什么(请参阅我的代码)。我被困在那上面了=\那就是了。