generowanie wszytskich podziałów zbioru n-elementowego w Pythonie

0

Witam, mam za zadanie napisać generator rr(n) zwracający wszystkie relacje równoważności na zbiorze {1,...,n}, reprezentowane jako lista klas abstrakcji. (wszystkie możliwe podziały zbioru)
Na przykład dla n=4 generator powinien zwrócić w dowolnej kolejności następujące listy zbiorów:
[{1},{2},{3},{4}]
[{1,2},{3},{4}]
[{1,3},{2},{4}]
[{1,4},{2},{3}]
[{2,3},{1},{4}]
[{2,4},{1},{3}]
[{3,4},{1},{2}]
[{1,2},{3,4}]
[{1,3},{2,4}]
[{1,4},{2,3}]
[{1,2,3},{4}]
[{1,2,4},{3}]
[{1,3,4},{2}]
[{2,3,4},{1}]
[{1,2,3,4}]
albo te same zbiory w dowolnej innej kolejności.

Mam tyle, ale nie wyświetlają się wszystkie możliwości i już nie wiem co tu zmienić żeby było dobrze, proszę o pomoc :)

def rr(n):
    """funkcja generuje wszystkie podziały zbioru {1,...,n}"""
    if n==2:
        yield {1},{2}
    else:
        for i in rr(n-1):
            for s in range(n-2):
                yield i[:(s)] + (i[s] | {n}, ) + i[(s+1):]
            yield i + ({n}, )
for i in rr(4):
    print(i)
0
def rr(t):
    yield [t]
    if len(t)>1:
    	for i in xrange(1, len(t)):
    		for r in rr(t[i:]):
    			yield [t[:i]] + r
    			
for s in rr([1,2,3,4]):
    print s

python to zdecydowanie nie moj jezyk wiec na 100 da sie to zrobic ladniej, natomiast generowane wyniki spelniaja wymogi zadania jesli chodzi o ilosc podzbiorow, co do reszty to dostosuj juz na wlasna reke

1 użytkowników online, w tym zalogowanych: 0, gości: 1