![]() |
2d Array adds last element to entire list - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: 2d Array adds last element to entire list (/thread-31047.html) |
2d Array adds last element to entire list - waiteup - Nov-19-2020 Good Afternoon! First time poster! I keep running into this simple problem when trying to fill my 2d array from my SQL. For some reason it will not store the values into my variables. I am really not too sure what else to do here? It seems painfully obvious and is probably staring at me right in the face. Here is my function - def GetPlayerData(conn,cur): rows, cols = (6, 6) Players = [[0]*cols]*rows cur.execute('SELECT * FROM Players') for x in range (1,6): nextline = cur.fetchone() Players[x][0]= nextline['Players'] Players[x][1]= nextline['Total_Cash'] Players[x][2]= nextline['Risk_Level'] print(Players[x][0]) print(Players[2][2]) return PlayersMy first print(Players[x][0]) Displays the entire list as it cycles through x. My second print(Players[2][2]) shows the last 'players' in the list. every single players[1-5] is stored as the last item in my database. Thank you RE: 2d Array adds last element to entire list - waiteup - Nov-19-2020 After looking at the screen for 4 hours, I came to the realization that I was making 5 different arrays and I could just use Player = {} Player[1,0] instead of Player [1][1]Thanks guys! RE: 2d Array adds last element to entire list - bowlofred - Nov-19-2020 Your initial problem was that you were not making different lists, but just several copies of one list. The construction: [[]] * num takes the inside list and makes num references to it, but they're all the same list. So each time through was overwriting the previous trips through the loop.>>> players = [[0] * 4] * 3 >>> players [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] >>> players[0][1] = "x" >>> players [[0, 'x', 0, 0], [0, 'x', 0, 0], [0, 'x', 0, 0]]For this to work, you'd need to make different lists. >>> players = [[0] * 4 for x in range(3)] >>> players [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] >>> players[0][1] = "x" >>> players [[0, 'x', 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] |