-1

I want to generate random numbers to vectors, but when the external loop ends, the list contains duplicate values from the last vector

class Cops_planner:
    def __init__(self):
        self.move_plan_vector = []
        self.move_plan_vector.append(0)
        self.move_plan = []
        for i in range(number_of_cops):
            self.move_plan.append(self.move_plan_vector)

    def algorithm(self, worlds_list_copy):
        vector = []
        for j in range(number_of_cops):
            vector.clear()
            for i in range(k):
                vector.append(randint(0, 4))
            self.move_plan[j] = vector
            print(self.move_plan[j]) #1.
        print(self.move_plan) #2.

So, for example, the first print looks like this:

[1, 0, 4, 3, 3]
[4, 0, 1, 3, 1]
[0, 0, 3, 2, 2]
[2, 3, 0, 4, 2]

and the second one is like this:

[[2, 3, 0, 0, 2], [2, 3, 0, 0, 2], [2, 3, 0, 0, 2], [2, 3, 0, 0, 2], [2, 3, 0, 0, 2]]
kelp_sk
  • 48
  • 6

1 Answers1

0

You're clearing the vector list but not its reference. So you need to create a new list or use a list with different reference. Otherwise when you're populating the vector list then self.move_plan hoding the last populated values of vector :

class Cops_planner:
    def __init__(self):
        self.move_plan_vector = []
        self.move_plan_vector.append(0)
        self.move_plan = []
        for i in range(number_of_cops):
            self.move_plan.append(self.move_plan_vector)

    def algorithm(self, worlds_list_copy):
        for j in range(number_of_cops):
            vector = []
            for i in range(k):
                vector.append(randint(0, 4))
            self.move_plan[j] = vector
            print(self.move_plan[j]) #1.
        print(self.move_plan) #2.
Taohidul Islam
  • 5,246
  • 3
  • 26
  • 39