This also seems to do it: def PowerSet2( PowerSetSoFar, element): return [i+j for i in PowerSetSoFar for j in [ [], [element] ] ] def PowerSet( set ): return reduce (PowerSet2, set, [ [] ]) print PowerSet([1,2,3]) Walter.