Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to generate all configurations of a given length in Python

I am trying to generate a list of all configurations where in each configuration is as follows. Each configuration is a list of length n whose entry can take on values 0-q where q is a positive integer. For example if q=1 then I am trying to generate a list of all possible binary lists of length n. So if n=2,q=1 then the desired output is [[0,0],[0,1],[1,0],[1,1]]. For an arbitrary q, the desired output list is of size (q+1)^n because there q+1 choices for each element of the list of length n. For example, for n=3,q=2, the desired output is [[0,0,0],[0,0,1],[0,0,2],[0,1,0],..] and the output list is of size 3^3=27.

I have tried to do this using recursion for q=1 but am not sure how to write efficient code for arbitrary q? Here is the code and output for q=1.

def generateAllSpinConfigs(n,arr,l,i):
    if i == n: 
        l.append(arr[:]) 
        return

    arr[i] = 0
    generateAllSpinConfigs(n,arr,l,i+1)  
    arr[i] = 1
    generateAllSpinConfigs(n,arr,l,i+1)

    return l

n=2
l=[]  
arr=[None]*n
print(generateAllSpinConfigs(n,arr,l,0))

>>[[0,0],[0,1],[1,0],[1,1]]

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

itertools.product does what you want:

def generate_configurations(n,q):
    return [list(p) for p in itertools.product(range(q+1),repeat = n)]

print(generate_configurations(2,1))

#[[0, 0], [0, 1], [1, 0], [1, 1]]
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading