UserList.__getslice__(): copy.copy(self.data) vs. self.__class__(self.data).

Tom Funk _spam_sux_tdfunk at _spam_sux_nettally.com
Tue Mar 14 23:56:33 EST 2000


Hi, Bernhard:

In an article posted 15 Mar 2000 00:25:29 +0100,
Bernhard Herzog (herzog at online.de) said:
> >  Note that missing 
> >  i or j in the slice expression are replaced by zero or 
> >  sys.maxint, respectively, 
... 
> It seems negative indices are automatically subtracted from the length.

Actually, this behavior matches the description in the Language Reference 
Manual.

> UserList has only one instance variable, data, and that is handled
> correctly. If you need to copy more variables in a derived class you
> should probably override this method, IMO.

OK.

> Note that all slicings succeed for normal lists. If both indices of the
> slice are too large or too small (i.e. too negative ;-) ) the result is
> an empty list.

Uh.... I stand before you hat in hand begging forgiveness.... I just went 
back and tried this in interactive mode:

  >>> l=[0,1,2,3,4,5,6]
  >>> l[-10]
  Traceback (innermost last):
    File "<interactive input>", line 1, in ?
  IndexError: list index out of range
  >>> l[-100:-99]
  [0, 1]
  >>> l[-100:-50]
  [0, 1, 2, 3, 4, 5, 6]
  >>> l[-100:-50]
  []
  >>> l[-10:-100]
  []
  >>> # damn!

And, of course, you are correct.  The error resulted from an index error 
(I.e, the runtime called the native equivalent of __getitem__(self, I)).  
I don't know what I was doing before (other than embarrassing myself :-/) 

> A normal list doesn't raise an IndexError here. It returns [0, 1, 2, 3]
> Even ul[-10:-100] succeeds for a normal list, returning [] .

Yes it does... see above.

OK, you and Alex win: UserList stays as it is, and I sit back down in my 
chair and shut-the-heck-up <g>. 

I was thinking that we'd be left with why test_userlist.py was 
failing.... but NOT!  Even that seems to have remedied itself:

  D:\Python\Lib\test>python test_userlist.py

  D:\Python\Lib\test>

So, I'm truly sorry to have wasted everyone's time.  I was *way* off-
based with my testing/assessment/findings.

Thank you Bernhard and Alex for setting me straight.

<sheepish g>

-- 
-=< tom >=-
Thomas D. Funk                           |        "Software is the lever
Software Engineering Consultant          | Archimedes was searching for"
Advanced Systems Design, Tallahassee FL. |




More information about the Python-list mailing list