Hi guys!
I am working on Conway's Game of Life right now and I've run into a
little problem.
I represent dead cells with 0s and live ones with 1s. Check this out:
>>grid = [[0] * 3] * 3 grid
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>grid[0][0] = 1
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
Now, that's not what I want. I just want the first element of the
first sublist to be a 1, not the first of every one. Here's what I
tried and didn't work:
0. grid = [[0] * 3][:] * 3 then the same grid[0][0] = 1 statement
1. grid = [[0][:] * 3] * 3 followed by the same assignment
2. (grid[0])[0] = 1 with the original initialization of the grid
So, that means that it isn't a problem with two different variables
refering to the same list (0. and 1. prove that). What I don't
understand is why 2. doesn't work either. I'm baby-feeding my
instructions to Python and the mistake is still there. Any ideas?
Hope you can help. Thanks in advance,
Pablo 5 1502
Classic
--
@-salutations
Michel Claveau
On Sunday 19 August 2007, Pablo Torres wrote:
Hi guys!
I am working on Conway's Game of Life right now and I've run into a
little problem.
I represent dead cells with 0s and live ones with 1s. Check this out:
>>grid = [[0] * 3] * 3
>>grid
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>grid[0][0] = 1
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
Now, that's not what I want. I just want the first element of the
first sublist to be a 1, not the first of every one. Here's what I
tried and didn't work:
0. grid = [[0] * 3][:] * 3 then the same grid[0][0] = 1 statement
1. grid = [[0][:] * 3] * 3 followed by the same assignment
2. (grid[0])[0] = 1 with the original initialization of the grid
So, that means that it isn't a problem with two different variables
refering to the same list (0. and 1. prove that). What I don't
understand is why 2. doesn't work either. I'm baby-feeding my
instructions to Python and the mistake is still there. Any ideas?
If you want three copies of the list, you need to copy it thrice (well, twice)
Thus:
>>row = [0] * 3 grid = [] for n in xrange(3): grid.append(row[:])
...
>>grid
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>grid[0][0] =1 grid
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
>>>
--
Regards, Thomas Jollans
GPG key: 0xF421434B may be found on various keyservers, eg pgp.mit.edu
Hacker key <http://hackerkey.com/>:
v4sw6+8Yhw4/5ln3pr5Ock2ma2u7Lw2Nl7Di2e2t3/4TMb6HOPTen5/6g5OPa1XsMr9p-7/-6
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQBGyMbtJpinDvQhQ0sRApTqAJ4m/bhLdNtr9XGjBhipvhYQ7T4H0gCfXmtW
/+c21FwvXIth2/oXpP48Afw=
=tbqy
-----END PGP SIGNATURE-----
Pablo Torres schreef:
Hi guys!
I am working on Conway's Game of Life right now and I've run into a
little problem.
I represent dead cells with 0s and live ones with 1s. Check this out:
>>grid = [[0] * 3] * 3
>>grid
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>grid[0][0] = 1
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
Now, that's not what I want. I just want the first element of the
first sublist to be a 1, not the first of every one. Here's what I
tried and didn't work:
0. grid = [[0] * 3][:] * 3 then the same grid[0][0] = 1 statement
1. grid = [[0][:] * 3] * 3 followed by the same assignment
2. (grid[0])[0] = 1 with the original initialization of the grid
So, that means that it isn't a problem with two different variables
refering to the same list (0. and 1. prove that). What I don't
understand is why 2. doesn't work either. I'm baby-feeding my
instructions to Python and the mistake is still there. Any ideas?
Hope you can help. Thanks in advance,
The multiplication operator doesn't make new copies; all elements
reference the same object, as you can see with id():
>>lst = [0] * 3 lst
[0, 0, 0]
>>id(lst[0]), id(lst[1]), id(lst[2])
(9788716, 9788716, 9788716)
As a consequence, if you modify one element, you change them all (since
it's all the same object). Solution: make sure to create independent lists.
>>grid = [[0] * 3 for i in range(3)] grid
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>grid[0][0] = 1
--
If I have been able to see further, it was only because I stood
on the shoulders of giants. -- Isaac Newton
Roel Schroeven
Thanks everyone. Now I see why every row in my grid were actually the
same object.
Pablo
Roel Schroeven wrote:
Pablo Torres schreef:
>Hi guys!
I am working on Conway's Game of Life right now and I've run into a little problem. I represent dead cells with 0s and live ones with 1s. Check this out:
> >>grid = [[0] * 3] * 3 >>grid
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
> >>grid[0][0] = 1
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
Now, that's not what I want. I just want the first element of the first sublist to be a 1, not the first of every one. Here's what I tried and didn't work:
0. grid = [[0] * 3][:] * 3 then the same grid[0][0] = 1 statement 1. grid = [[0][:] * 3] * 3 followed by the same assignment 2. (grid[0])[0] = 1 with the original initialization of the grid
So, that means that it isn't a problem with two different variables refering to the same list (0. and 1. prove that). What I don't understand is why 2. doesn't work either. I'm baby-feeding my instructions to Python and the mistake is still there. Any ideas?
Hope you can help. Thanks in advance,
The multiplication operator doesn't make new copies; all elements
reference the same object, as you can see with id():
>>>lst = [0] * 3 lst
[0, 0, 0]
>>>id(lst[0]), id(lst[1]), id(lst[2])
(9788716, 9788716, 9788716)
I think you probably meant something like,
>>lst = [[0] * 3] * 3 lst
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>id(lst[0]), id(lst[1]), id(lst[2])
(15937704, 15937704, 15937704)
>>>
i.e. a list of mutable types where the difference between multiple
objects and multiple references to the same object will be apparent.
With small integers you're likely to find you have multiple references
to the same integer objects however the list is constructed.
Duncan This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Steven Bethard |
last post by:
I think one of the biggest reasons we're having such problems coming
to any agreement on decorator syntax is that each proposal makes a
number of syntax decisions, not just one. For decorators, I...
|
by: Nils Grimsmo |
last post by:
i always have trouble explaining why creation of multidimensional lists
is not as straight forward as it could be in python. list comprehensions
are ugly if you are new to the language. i really...
|
by: Nicolas Fleury |
last post by:
Hi everyone, I would to know what do you think of this PEP. Any comment
welcomed (even about English mistakes).
PEP: XXX
Title: Specialization Syntax
Version: $Revision: 1.10 $...
|
by: Andy |
last post by:
Hi,
I don't know if this is the correct group to post this, but
when I multiply a huge floating point value by a really
small (non-zero) floating point value, I get 0 (zero) for the result.
This...
|
by: Ralf Hildebrandt |
last post by:
Hi all!
First of all: I am a C-newbie.
I have noticed a "strange" behavior with the standart integer
multiplication. The code is:
void main(void)
|
by: Vijay Kumar R Zanvar |
last post by:
Hi,
Why multiplication of pointers is not allowed?
Till now I only know this, but not the reason why!
PS: As a rule, I searched the FAQ, but could not
find an answer.
--
Vijay Kumar R...
|
by: Christopher Dyken |
last post by:
Hi group,
I'm trying to implement two routines to handle 32x32-bits and
64x64-bits signed integer multiplication on a 32 bits machine in C. It
easy to find descriptions of non-signed...
|
by: mahesh |
last post by:
Hi all,
I have following code that is supposed to increase the power by
specified value.
int main()
{
system("cls");
int i, exponent;
double base;
double new_base=0.0;
|
by: Sozos |
last post by:
Hi guys. I have a problem with writing the base case for the following matrix multiplication function I have implemented. Please help.
#define index(i,j,power) (((i)<<(power))+(j))
void...
|
by: Faith0G |
last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome former...
|
by: ryjfgjl |
last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
|
by: taylorcarr |
last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
|
by: ryjfgjl |
last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
| |