I'd like to make a 9x9 two-dimensional array (list) with python (ver.3.9), store the 99 table there, and display it after that, but I get a strange result.

Asked 2 years ago, Updated 2 years ago, 37 views

The source code is as follows:

 mt=[None]*9]*9
for i in range (9):
    for jin range (9):
        mt[i][j]=(i+1)*(j+1)
        print("%2d"%(mt[i][j]), end="")
    print()

print(mt)#why
for i in range (9):
    for jin range (9):
        print("%2d"%(mt[i][j]), end="")
    print()

For some reason, the results are as follows:

 1 2 3 4 5 6 7 8 9  
 2   4   6   8  10  12  14  16  18  
 3   6   9  12  15  18  21  24  27  
 4   8  12  16  20  24  28  32  36  
 5  10  15  20  25  30  35  40  45  
 6  12  18  24  30  36  42  48  54  
 7  14  21  28  35  42  49  56  63  
 8  16  24  32  40  48  56  64  72  
 9  18  27  36  45  54  63  72  81  
[[9, 18, 27, 36, 45, 54, 63, 72, 81], [9, 18, 27, 36, 45, 54, 63, 72, 81], [9, 18, 27, 36, 45, 54, 63, 72, 81], [9, 18, 27, 36, 45, 54, 63, 72, 81], [9, 18, 27, 36, 45, 54, 63, 72, 81], [9, 18, 27, 36, 45, 54, 63, 72, 81], [9, 18, 27, 36, 45, 54, 63, 72, 81], [9, 18, 27, 36, 45, 54, 63, 72, 81], [9, 18, 27, 36, 45, 54, 63, 72, 81]]
 9  18  27  36  45  54  63  72  81  
 9  18  27  36  45  54  63  72  81  
 9  18  27  36  45  54  63  72  81  
 9  18  27  36  45  54  63  72  81  
 9  18  27  36  45  54  63  72  81  
 9  18  27  36  45  54  63  72  81  
 9  18  27  36  45  54  63  72  81  
 9  18  27  36  45  54  63  72  81  
 9  18  27  36  45  54  63  72  81  

I'm troubled because I don't know the cause.
Thank you for your cooperation.

python

2022-09-30 19:29

1 Answers

mt=[None]*9]*9
mt=[None]*9 for i in range(9)] to fix it.

The result of your question is multidimensional array trap.
Although the link details, the internal list is identical because it copies nine [None]*9 lists outside it.

Therefore, every time you rewrite mt[i], everything from mt[0] to mt[8] is affected, and the array of steps 1 (list of mt[0]) is also rewritten, for example, as shown in the code below.

 mt=[None]*9]*9
#mt = [[None]*9 for i in range(9)]
for i in range (9):
    for jin range (9):
        mt[i][j]=(i+1)*(j+1)
        print("%2d"%(mt[i][j]), end="")
    print(Array of steps "1 = %s" %mt[0])

Output:

 1 2 3 4 5 6 7 8 9 Array of steps = [1, 2, 3, 4, 5, 6, 7, 8, 9]
 2 4 6 8 10 12 14 16 181 Stages = [2, 4, 6, 8, 10, 12, 14, 16, 18]
 369 12 15 18 21 24 271 Stages = [3, 6, 9, 12, 15, 18, 21, 24, 27]
 48 12 16 20 24 28 32 361 Stages Array = [4, 8, 12, 16, 20, 24, 28, 32, 36]
 5 Array of steps 10 15 20 25 30 35 40 45 1 = [5, 10, 15, 20, 25, 30, 35, 40, 45]
 6 12 18 24 30 36 42 48 541 Stages Array = [6, 12, 18, 24, 30, 36, 42, 48, 54]
 7 14 21 28 35 42 49 56 63 1 Stages Array = [7, 14, 21, 28, 35, 42, 49, 56, 63]
 816 24 32 40 48 56 64 721 Stages Array = [8, 16, 24, 32, 40, 48, 56, 64, 72]
 918 27 36 45 54 63 72 81 Stages Array = [9, 18, 27, 36, 45, 54, 63, 72, 81]


2022-09-30 19:29

If you have any answers or tips


© 2024 OneMinuteCode. All rights reserved.