By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,767 Members | 1,310 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,767 IT Pros & Developers. It's quick & easy.

Creating a matrix?

P: n/a
Is there a nice(r) way of creating a list of uniform values? I'm currently
using: list('0'*N), which makes a string and then chops it up into a list. I
need it to create a NxN matrix:

matrix =[list('0'*N) for i in range(N)]

(elements need to be mutable afterwards, a shallow copy is bad)

While this is short and concise, it also feels odd :)
Jul 18 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
Ivan Voras wrote:
Is there a nice(r) way of creating a list of uniform values? I'm
currently using: list('0'*N), which makes a string and then chops it up
into a list. I need it to create a NxN matrix:

matrix =[list('0'*N) for i in range(N)]


matrix = [['0']*N]*N

Mit freundlichen Gruessen,

Peter Maas

--
-------------------------------------------------------------------
Peter Maas, M+R Infosysteme, D-52070 Aachen, Hubert-Wienen-Str. 24
Tel +49-241-93878-0 Fax +49-241-93878-20 eMail pe********@mplusr.de
-------------------------------------------------------------------
Jul 18 '05 #2

P: n/a
Peter Maas wrote:
Ivan Voras wrote:
Is there a nice(r) way of creating a list of uniform values? I'm
currently using: list('0'*N), which makes a string and then chops it
up into a list. I need it to create a NxN matrix:

> matrix =[list('0'*N) for i in range(N)]


matrix = [['0']*N]*N


Sorry, Peter, but that's a rookie mistake:
matrix = [['0'] * 4] * 4
matrix [['0', '0', '0', '0'], ['0', '0', '0', '0'], ['0', '0', '0', '0'], ['0',
'0', '0
', '0']] matrix[1][2] = '1'
matrix

[['0', '0', '1', '0'], ['0', '0', '1', '0'], ['0', '0', '1', '0'], ['0',
'0', '1
', '0']]

Notice that each of the inner lists contains four seperate references
to the string '0', but the outer repetition simply copies the inner
list four times, resulting in four references to the same inner list!
Changing any one element affects the same entry in each of the other
three lists...

-Peter
Jul 18 '05 #3

P: n/a
Peter Maas wrote:
Ivan Voras wrote:
Is there a nice(r) way of creating a list of uniform values? I'm
currently using: list('0'*N), which makes a string and then chops it
up into a list. I need it to create a NxN matrix:

> matrix =[list('0'*N) for i in range(N)]


matrix = [['0']*N]*N


I can't believe I didn't try that one :)

(hmm, actually, I think I tried it but the results were bad for some
reason... oh well, thank you :) )
Jul 18 '05 #4

P: n/a
Peter Hansen wrote:
>>> matrix[1][2] = '1'
>>> matrix

[['0', '0', '1', '0'], ['0', '0', '1', '0'], ['0', '0', '1', '0'], ['0',
'0', '1
', '0']]

Notice that each of the inner lists contains four seperate references
to the string '0', but the outer repetition simply copies the inner
list four times, resulting in four references to the same inner list!
Changing any one element affects the same entry in each of the other
three lists...


Sorry:

matrix = [['0']*N for i in range(N)]

Mit freundlichen Gruessen,

Peter Maas

--
-------------------------------------------------------------------
Peter Maas, M+R Infosysteme, D-52070 Aachen, Hubert-Wienen-Str. 24
Tel +49-241-93878-0 Fax +49-241-93878-20 eMail pe********@mplusr.de
-------------------------------------------------------------------
Jul 18 '05 #5

P: n/a
N*N matrix of lists...

[ [0]*N for i in range( N ) ]

Seems clearer to me, anyway (and stores actual 0 values, not '0' in the
result). Have fun,
Mike

Ivan Voras wrote:
Is there a nice(r) way of creating a list of uniform values? I'm
currently using: list('0'*N), which makes a string and then chops it
up into a list. I need it to create a NxN matrix:

matrix =[list('0'*N) for i in range(N)]

(elements need to be mutable afterwards, a shallow copy is bad)

While this is short and concise, it also feels odd :)


_______________________________________
Mike C. Fletcher
Designer, VR Plumber, Coder
http://members.rogers.com/mcfletch/

Jul 18 '05 #6

P: n/a
> [ [0]*N for i in range( N ) ]

xrange is a bit faster for large N, you don't need to create a list that
gets destroyed.

- Josiah
Jul 18 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.