I am trying to find all combinations of a four element vector that contains only 1's and -1's.
Ex (1,1,1,1),(-1,1,1,1),...(-1,-1,-1,-1) etc
My idea to do this is pretty inefficient im sure but I can't think of another way to do it, so here is what I was trying to do.
I found how many total vectors there would be, then created that many empty lists. I began with vector A
and then compared this to each list in vectors
. If A
matched any of the lists then I randomly changed the sign of an element of A
, and then again checked the new list A
against vectors
. If A
didn't find a match then it replaced on of the lists in vectors
, and the while loop was incremented by 1. This should proceed until all possible combinations have been found and printed.
However my code is just spitting out the first change in vectors
then continually looping without adding any new A
's to vectors
. Can anyone spot what in my code isn't doing what I intended it to do and/or point me in the right direction? Thanks
import random
numvec = 2**4 # number of macrostates for a 4 component 2-state system
vectors = [[0,0,0,0] for i in range(numvec)] #initializing the numvec vectors
A = [1,1,1,1]
i = 0
while i < 16:
if any(x == A for x in vectors):
y = random.randrange(0, 3)
A[y] = A[y] * -1
else:
vectors[i] = A
print vectors[i]
i += 1
print vectors
Oh and again I realize this method is incredibly inefficient but as this is a homework assignment I am more concerned with being able to get python to do what I want it to do, then using a bunch of built in functions to do the work for me. Thanks again.