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

Your email address will not be published. Required fields are marked *