"indexed properties"...
David C. Ullrich
dullrich at sprynet.com
Tue May 20 11:40:17 EDT 2008
In article <20080520154802.4b5df647 at hyperspace>,
pataphor <pataphor at gmail.com> wrote:
> On Tue, 20 May 2008 06:12:01 -0500
> David C. Ullrich <dullrich at sprynet.com> wrote:
>
> > Well, ok. Like I said, I never _took_ the position that it _should_
> > be a list of lists, I just said I didn't see the advantage to using
> > a single list.
>
> I'm now thinking about a list of lists containing single element lists.
>
> def test():
> n = 3
> R = range(n)
> M = [[[i+j*n] for i in R] for j in R]
> for L in M:
> print L
> row2 = M[1]
> print
> print row2
> col3 = [L[2] for L in M]
> print col3
> col3[1][0]=9
>
> print col3
> print row2
> print
> for L in M:
> print L
>
> if __name__=='__main__':
> test()
>
> The idea is to use a single element list as kind of storage facility.
> That enables me to copy a column, then change something in that column
> and make the change turn up in the matrix and even in a previously made
> copy of a row that shared the specific element.
>
> > Today's little joke: Long ago I would have solved
> > this by storing the data as a list of rows and _also_
> > a list of columns, updating each one any time the
> > other changed. Just goes to show you things
> > could always be worse...
>
> Well have I ever ... I only thought about this last week and I
> actually thought it was a *good* idea.
Sorry. If you really want to do this you could keep things
in sync automatically by writing the appropriate __setitem__
and resolving never to modify the data except through that...
def whatever.__setitem__(self, (row,col), value):
self.rows[row][col] = value
self.cols[col][row] = value
Seems to me like an, um, "untenable" waste of space. And you'd
need to be certain to never set anything except through
self[row,col]; as far as I can see anything like setrow()
would be a loop "for col in range(width): self[row,col] =".
Hmm. You could keep the data in some object that encapsulates
the two double lists and use some fancy feature (__getattribute__?)
to make certain that the only possible access to the data
was through __getitem__...
> I only gave up on it because
> now I would have to keep track of how far the two views are out of
> sync, because some operation could use data that was modified by an
> other view. Zipstar transposition is very handy for syncing, but it is
> also very expensive. But probably not for you.
>
> > Expressing interest is a big mistake...
>
> How so? ;-)
>
> > Sometime soon a thread will appear titled something
> > like "indexed attributes" with a stripped-down but
> > functional example of what I have in mind for Matrix
>
> I can't wait! Keep up the good work.
>
> P.
--
David C. Ullrich
More information about the Python-list
mailing list