'Cause I feel a little bit cheated! I understand the maths behind the powerset and how the binary system allows 2^N possible numbers for N binary digits, so why explain so much correlation, and pull me away from the whole recursion if you’re going to drop a “you’re not smart enough line”?
Here is the complete solution. You’re not expected to understand every line, just take in the level of complexity.
def power_set(set): power_set_size = 2**len(set) result =  for bit in range(0, power_set_size): sub_set =  for binary_digit in range(0, len(set)): if((bit & (1 << binary_digit)) > 0): sub_set.append(set[binary_digit]) result.append(sub_set) return result
Okay first of all, this code doesn’t look THAT complex…
Secondly, I really don’t like examples that I am not supposed to understand… And surely I don’t understand this one, because the preceding explanation is very poor in terms of python code, such as:
set = ['a', 'b', 'c'] binary_number = "101" # produces the subset ['a', 'c'] # 'b' is left out because its binary digit is 0
(It doesn’t actually do anything except creating two variables…)
Which finally brings me to case-study conclusion quote (which also could double as a subtitle to the whole intro of this lesson):
(I would love to rewrite this commend describing how much I liked both methods explained PROPERLY in order to make the comparison.)