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]]
CodePudding user response:
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]]