Creating a matrix?

I

Ivan Voras

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 :)
 
P

Peter Maas

Ivan said:
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
 
M

Mike C. Fletcher

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 said:
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/
 
I

Ivan Voras

Peter said:
Ivan said:
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 :) )
 
P

Peter Hansen

Peter said:
Ivan said:
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
 
P

Peter Maas

Peter said:
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
 
J

Josiah Carlson

[ [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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,577
Members
45,054
Latest member
LucyCarper

Latest Threads

Top