Мой код такой. Я хочу добавить случайные числа в диапазоне 10-99. И когда код работает, это создает такую проблему. Все четыре строки становятся одинаковыми. Также я пытаюсь дать цифры с input, но в этот раз результат был таким же. Только первые четыре целых числа занимают все четыре строки.
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
В чем проблема в исходном коде?
Является ли целью дать вам массив 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]
mx = [[0]*4] * 4 будет воспроизводить один и тот же список только 4 раза. Он не будет создавать 4 отдельных списка, как вы собираетесь. Вы можете попробовать что-то вроде приведенного ниже кода, чтобы создать отдельные списки внутри списка.
mx = [[0]*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
Когда вы делаете 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]]