Power Set List from Input List

credford 0 Tallied Votes 288 Views Share

Returns the power set of the elements of a given list (even if some of those elements are also lists).

# From another DaniWeb snippet
def int2bin(n, count=24):
    """returns the binary of integer n, using count number of digits"""
    return "".join([str((n >> y) & 1) for y in range(count-1, -1, -1)])

# PowerSet of a List
def PowerSet(orignal_list):
	list_size = len(orignal_list)
	num_sets = 2**list_size
	powerset = []
	# Don't include empty set
	for i in range(num_sets)[1:]:
		subset = []
		binary_digits = list(int2bin(i,list_size))
		list_indices = range(list_size)
		for (bit,index) in zip(binary_digits,list_indices):
			if bit == '1':
				subset.append(orignal_list[index])
		powerset.append(subset)
	return powerset

if __name__ == "__main__":
	print PowerSet([1,2,3])