Problem with python code. Combinations of 2-state vectors

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
1 reply · 2K views
wyosteve
Messages
23
Reaction score
0
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 I am 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

Code:
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.
 
Physics news on Phys.org
never mind, figured it out (with help)