Python program to get all subsets of set using Loops and Functions
The topic mainly deals with the concept of generating subsets of a given set.
This is important because, later on in advanced programming, it is helpful in implementing Dynamic Programming Solutions.
Python program to generate all possible subsets of a given set within a list
Moreover, a subset is defined as a part of a set or the whole set itself.
Let’s understand the concept with some examples and then implement it.
Example 1:
Input : [1, 2]
Output : [[], [1], [1, 2], [2]]
Example 2:
Input :[1, 2, 3]
Output :[[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
Explanation of the Solution :
This program solution is described in many different ways Recursion, slicing, Itertools in python.
But this solution is based on simple loops and functions.
We know there are (2^n) subsets for a set of n elements.
Moreover, this solution is based on a simple idea :
Convert the numbers 0 to (2^n-1) into binary numbers, where n is the length of list
Now represent the binary equivalents in (n number of bits)
ex: a=[1, 2, 3, 4], n=4
0: (0) : (0000)
1: (1) : (0001)
7: (111) : (0111) and so on
Certainly, there is now a Binary list of elements represented in n bits.
Now traverse every digit in the sub list and append those values which are 1 and exclude those which are 0.
Let’s jump on to code what we have learned above,
def decimalToBinary(n): # converting decimal to binary
b = 0
i = 1
while (n != 0):
r = n % 2
b+= r * i
n//= 2
i = i * 10
return b
def makeList(k): # list of the binary element produced
a =[]
if(k == 0):
a.append(0)
while (k>0):
a.append(k % 10)
k//= 10
a.reverse()
return a
def checkBinary(bin, l):
temp =[]
for i in range(len(bin)):
if(bin[i]== 1):
temp.append(l[i])
return temp
l =[1, 2, 3]
binlist =[]
subsets =[]
n = len(l)
for i in range(2**n):
s = decimalToBinary(i)
arr = makeList(s)
binlist.append(arr)
for i in binlist:
k = 0
while(len(i)!= n):
i.insert(k, 0) # representing the binary equivalent according to len(l)
k = k + 1
for i in binlist:
subsets.append(checkBinary(i, l))
# print(binlist) print this for more understanding
print(subsets)Output : [[], [3], [2], [2, 3], [1], [1, 3], [1, 2], [1, 2, 3]]
This is how the subsets can be produced using basic loops and functions in Python.
I hope this is pretty much clear to implement the concept regarding subsets.
Also read:
Leave a Reply