[Eric S. Raymond] > Given > > >>> a = [1, 2, 3, 4] > > because > > >>> a[-2] > -3 > > I expected that a.insert(-2, 0) would yield [1, 2, 0, 3, 4]. It was a > rude shock to discover that > > >>> a > [0, 1, 2, 3, 4] > > In fact I think this may be the nastiest surprise Python has > handed me since I started using it. I never noticed it, but agree it's strange. Did you open a feature request on SourceForge? Note that array objects (created by the array module) share this behavior. > The reference manual says "same as s[i:i] = [x] if i >= 0" which > of course doesn't cover the i < 0 case. Which formally means its behavior is undefined. > David Beasley's reference says "Inserts x at index i" which sounds like > the behavior I was expecting but didn't get. Ya, so file a bug report with David <wink>. > Is this a deliberate design choice, an oversight, or a plain bug? If > it's a choice, it's damn poorly documented -- this deserves at least a > footnote in the list methods table. If it's an oversight or bug, I > volunteer to fix it. Only Guido *may* be able to say for sure. Plausible: the behavior for i<0 was deliberate at the start, and when Python *grew* negative indices (it didn't always accept them), fear of incompatibility prevented changing .insert behavior (in the other cases where negative indices "grew a meaning", the old behavior was to raise an exception; but .insert accepted them silently). Digging thru CVS, the current behavior for i<0 has always been that way (since listobject.c rev 1.1); and the "if i >= 0" qualifier was added to libtypes.tex a bit over 6 years ago, with checkin comment correct description of list.insert() Hard call! I agree it should change, but if it breaks code the "but it was formally undefined" comeback doesn't really warm peoples' hearts. first-one-to-suggest-a-future-stmt-dies-ly y'rs - tim
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4