Вы хотите, чтобы комбинации в порядке по длине.В Python вы можете написать:
import itertools
def subsets(iterable):
"Generate the subsets of elements in the iterable, in order by length."
items = list(iterable)
for k in xrange(len(items) + 1):
for subset in itertools.combinations(items, k):
yield subset
>>> list(subsets([1,2,3,4]))
[(), (1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4),
(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2, 3, 4)]
См. этот ответ для обзора алгоритмов, которые генерируют комбинации.(Или вы можете посмотреть на реализацию Python Рэймонда Хеттингера, itertoolsmodule.c lines 2026f .)