Находим все возможные комбинации элементов последовательности на Python
def subsets(used=0, selected=0):
if used < len(raw):
subsets(used + 1, selected)
acc[selected] = raw[used]
subsets(used + 1, selected + 1)
else:
print acc[:selected]
if __name__ == "__main__":
raw = range(8)
acc = [None] * len(raw)
subsets()
#(c) http://dxdy.ru/topic6312.html