Вы можете использовать рекурсию с генератором:
d = [1,3,6,2,4]
def combos(v, c = []):
yield c
yield from ([] if not v else combos(v[1:], c+[v[0]]))
yield from ([] if not v else combos(v[1:], c))
print(list(filter(None, combos(d))))
Выход:
[[1], [1, 3], [1, 3, 6], [1, 3, 6, 2], [1, 3, 6, 2, 4], [1, 3, 6, 2], [1, 3, 6], [1, 3, 6, 4], [1, 3, 6], [1, 3], [1, 3, 2], [1, 3, 2, 4], [1, 3, 2], [1, 3], [1, 3, 4], [1, 3], [1], [1, 6], [1, 6, 2], [1, 6, 2, 4], [1, 6, 2], [1, 6], [1, 6, 4], [1, 6], [1], [1, 2], [1, 2, 4], [1, 2], [1], [1, 4], [1], [3], [3, 6], [3, 6, 2], [3, 6, 2, 4], [3, 6, 2], [3, 6], [3, 6, 4], [3, 6], [3], [3, 2], [3, 2, 4], [3, 2], [3], [3, 4], [3], [6], [6, 2], [6, 2, 4], [6, 2], [6], [6, 4], [6], [2], [2, 4], [2], [4]]