如何使Python 3.x Powerset生成器在生成集之前具备条件?

2024-09-27 22:26:23 发布

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

我是一个初级程序员,希望为不同大小的数字列表(通常至少150+)制作一个powerset。我的代码适用于较小的数字列表,但当我用[4,5,6]替换较大的列表时就不行了。你知道吗

def powerset(s):
    x = len(s)
    masks = [1 << i for i in range(x)]
    for i in range(1 << x):
        yield [ss for mask, ss in zip(masks, s) if i & mask]

print(list(powerset([4, 5, 6])))

#this prints: [[], [4], [5], [4, 5], [6], [4, 6], [5, 6], [4, 5, 6]]

(这不是一个家庭作业问题,而是我正在编写的更大代码的一部分) 任何帮助都是超级感谢,请记住,我只做了几个月的编程。谢谢您!你知道吗

编辑!:我现在意识到(感谢您的评论)这将产生一个可笑的大列表,新问题:是否有一种方法在生成powerset之前对其进行排序。如中所述,在生成器运行后,是否有方法使生成器不生成具有特定特征(大小、特定数字、属性)的列表,而不是去掉它生成的任何数量少于特定数字的集合,等)这样,它将产生一个显着减少数量的集,我不会有存储问题,我现在。你知道吗


Tags: 方法代码in列表for数量lendef

热门问题