yield ()
while pq:
    p, x = heappop(pq)
yield x
for other in ps:
    if other < x[-1]:
        new = x + (other,)
item = prob(new), new
heappush(pq, item)
a = [1, 0.1, 0.5]
print(list(gen(a)))
Алгоритм получения всех возможных подмножеств списка в порядке их произведения без построения и сортировки всего списка (т.е. генераторов)