Присвоение значения для для l oop в двумерных массивах (матрицы в python) - PullRequest
0 голосов
/ 04 мая 2020

Мой код такой. Я хочу добавить случайные числа в диапазоне 10-99. И когда код работает, это создает такую ​​проблему. Все четыре строки становятся одинаковыми. Также я пытаюсь дать цифры с input, но в этот раз результат был таким же. Только первые четыре целых числа занимают все четыре строки.

import random

mx = [[0]*4] * 4

for i in range(4):

    for j in range(4):
        num = random.randint(10,99)
        mx[i][j] = num

#printing
for i in range(4):
    for j in range(4):
        print(mx[i][j],sep=" ",end=" ")
    print()

И это дает эту проблему

C:\Users\Username\Desktop>python file.py
89 98 99 67
89 98 99 67
89 98 99 67
89 98 99 67

В чем проблема в исходном коде?

Ответы [ 3 ]

1 голос
/ 04 мая 2020

Является ли целью дать вам массив 4x4 или презентацию? Массив может быть получен в виде списка:

[print([random.randint(10,99) for x in range(4)]) for y in range(4)]

Вывод:

[15, 57, 37, 90]
[40, 58, 39, 67]
[97, 38, 84, 86]
[14, 72, 50, 13]
0 голосов
/ 04 мая 2020

mx = [[0]*4] * 4 будет воспроизводить один и тот же список только 4 раза. Он не будет создавать 4 отдельных списка, как вы собираетесь. Вы можете попробовать что-то вроде приведенного ниже кода, чтобы создать отдельные списки внутри списка.

mx = [None] * 4

for i in range(4):
    mx[i] = [None] * 4
    for j in range(5):
        num = random.randint(10,99)
        mx[i][j] = num
0 голосов
/ 04 мая 2020

Когда вы делаете mx = [[0]*4] * 4, вы не создаете список списков с нулями. Вместо этого вы создаете список со ссылками на тот же список. Любые изменения, внесенные в один из списков, внесут изменения во все из них.

Посмотрите на связанные вопросы:
1. Список изменений списков неожиданно отразился на подсписках
2. Как создать несколько пустых списков в python?
3. Как создать список или кортеж пустых списков в Python?

Для 2D-списков действительно нет «чистого» способ сделать это. Я бы предложил использовать numpy .zeros или go с

 mx = [[0, 0, 0, 0], \
       [0, 0, 0, 0], \
       [0, 0, 0, 0], \
       [0, 0, 0, 0]]

...