Grouping code by indentation - feature or ******?

Myles Strous myles at geocities.com
Wed Mar 30 01:08:04 EST 2005


Javier Bezos wrote:
> "Jacob Lee" <jelee2 at .edu> escribió en el mensaje
> > satisfy some handy properties, the first of which being:
> >   l[:n] + l[n:] = l
>
> I don't think l[:5] + l[5:] = l is a handy property
> and to me is clearly counterintuitive. Further,

It can be quite useful for inserting something into a list (or string),
after finding the position where you wish to insert it.
improvedList = l[:n] + [new stuff] + l[n:]

I'm very fond of Python's slice indexing - it makes a number of things
fairly easy, for example:

myList[:N]  # first N items
myList[-N:]  # last N items
myList[start:start+N] # N items, from start position

# chunk a list into smaller lists (or strings into smaller strings)
# (thanks to Thorsten Kampe for the original example)
def chunky(sequence, N):
    for i in range(len(sequence)/N + bool(len(sequence) % N)):
        print sequence[i*N:(i+1)*N]  # no off-by-one errors here :-)

myList = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
N = 3
chunky(myList, N)

which returns:

[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9]

Note you can leave out the bool part if you don't want that partial
chunk at the end.

I vaguely remember hearing at one stage that the
sequence[position:position+length] notation is also potentially useful
for indexing into large strings or buffers.

Alex Martelli stated back in 2001, when this issue was previously
discussed:
> it IS just an extension of what Koenig
> explains in his book "C Traps and Pitfalls", about how
> always using half-open ranges helps avoid off-by-one
> errors that otherwise tend to plague programs.

Regards, Myles.




More information about the Python-list mailing list