Хотите хранить n матриц в одном списке в python без использования numpy. я пытаюсь получить одну копию каждой матрицы в популяции - PullRequest
0 голосов
/ 31 марта 2020
import random
import copy
print("Enter the order of matrix")
size = 2
matrix =[]
population = []
pop = []
order = int(input())
for k in range(size):
    for i in range(order):      
        a =[] 
        for j in range(order):       
            a.append(random.randint(1,4)) 
        matrix.append(a) 
        print("a" , a)
        print("Matrix \t",matrix)
        print("\n")
    print(k)
    pop.append(matrix)
    print("POP \t",pop)
    population = population + copy.deepcopy(pop)
    matrix.clear()
print("Population \n", population")

Я пробовал это, но он добавляет матрицы k раз в список. Есть ли способ сделать это.

1 Ответ

0 голосов
/ 31 марта 2020

Чего именно вы надеетесь достичь? Наблюдаемое поведение проистекает из того факта, что переменные объекта в python всегда являются ссылками. Поскольку вы не перезапускаете matrix, а только очищаете его, его ссылка остается прежней. Таким образом, pop содержит список копий той же ссылки. При построении population вы используете deepcopy, копируя тем самым фактическое содержимое объекта. Следовательно, population содержит одну копию первой матрицы, затем две копии второй, затем три третьей и т. Д. c.

Вы также можете в скором времени использовать

pop = [ [ [ random.randint(1,4) for j in range(order) ] for i in range(order) ] for k in range(size) ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...