map, filter, reduce, zip, range, and.. slice?

Peter Hansen peter at engcorp.com
Wed Oct 31 20:09:52 EST 2001


Eyal Lotem wrote:
> 
> To get to the point, I've almost always lacked a 'slice' function, that
> slices sequences into smaller chunks.  For example:
> 
> divide("Hello world!", 2) => ["He", "ll", "o ", "wo", "rl", "d!"]

How would this do?  Note it can't in general guarantee to return
chunks of equal size, but a simple exception could be used to 
add that capability.

>>> def divide(s, n):
...   return map(lambda i, s=s, n=n : s[i:i+n], xrange(0, len(s), n))
...
>>> divide('Hello world!', 2)
['He', 'll', 'o ', 'wo', 'rl', 'd!']
>>> divide('Hello world', 2)
['He', 'll', 'o ', 'wo', 'rl', 'd']
>>> divide('Hello world!, 55)
['Hello world!']
>>> divide('', 2)
[]
>>> divide('Hello world!', 3)
['Hel', 'lo ', 'wor', 'ld!']
>>> divide(hex(-889275714)[2:].upper(), 2)
['CA', 'FE', 'BA', 'BE']
>>> divide([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 3)
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]


Thanks for the inspiration to write this.  I'm pretty sure this is
a method I've needed several times before and never could get my
head wrapped around Python's sophisticated underside enough to 
figure it out.

-- 
----------------------
Peter Hansen, P.Eng.
peter at engcorp.com



More information about the Python-list mailing list