Creating 2D array without Numpy - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Data Science (https://python-forum.io/forum-44.html) +--- Thread: Creating 2D array without Numpy (/thread-1818.html) |
Creating 2D array without Numpy - landlord1984 - Jan-27-2017 I want to create a 2D array and assign one particular element. The second way below works. But the first way doesn't. I am curious to know why the first way does not work. Is there any way to create a zero 2D array without numpy and without loop? The first way is: n=10 Grid=[[0]*n]*n Grid[1][1]=1 Quote:[0, 1, 0, 0, 0, 0, 0, 0, 0, 0] The second way is: n=10 Grid = [0] * n for i in range(n): Grid[i] = [0] * n Grid[1][1]=1 Quote:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] RE: Creating 2D array without Numpy - ichabod801 - Jan-27-2017 The first way doesn't work because [[0] * n] creates a mutable list of zeros once. Then when the second *n copies the list, it copies references to first list, not the list itself. So you have a list of references, not a list of lists. The second way a new [0] * n is created each time through the loop. That way there is no copying being done, so you end up with an actual list of lists. I often do the second way with a list comprehension: [[0] * n for row in n] RE: Creating 2D array without Numpy - landlord1984 - Jan-27-2017 (Jan-27-2017, 09:43 AM)ichabod801 Wrote: The first way doesn't work because [[0] * n] creates a mutable list of zeros once. Then when the second *n copies the list, it copies references to first list, not the list itself. So you have a list of references, not a list of lists. The second way a new [0] * n is created each time through the loop. That way there is no copying being done, so you end up with an actual list of lists. I often do the second way with a list comprehension:[[0] * n for row in n] So there is no way to do this by one line code unless to use numpy? L RE: Creating 2D array without Numpy - ichabod801 - Jan-28-2017 (Jan-27-2017, 05:29 PM)landlord1984 Wrote: So there is no way to do this by one line code unless to use numpy? The list comprehension I showed you does it in one line of code. |