[Tutor] FW: Splitting a number into even- and odd- numbered digits

Terry Carroll carroll at tjc.com
Thu Apr 20 19:14:23 CEST 2006


On Thu, 20 Apr 2006, Carroll, Barry wrote:

> > The first step in the calculation is to split the input into two
> strings:
> > the even- and odd- numbered digits, respectively.  The least
> significant
> > digit is defined as odd.
>  
> I forgot to include two important requirements:
> 
>     1. the length of the input string is arbitrary,
>     2. the order of the digits must be maintained.
> 
> I could not find a way to include these requirements in a single, simple
> expression.  

I really liked John Fouhy's approach, or at least a variation of it:

>>> def odd_even(s):
...    '''
...    Returns a tuple of two strings taken from s.  The first string is
...    the odd-numbered characters (counting from the right), and the
...    second is the even-numbered characters.
...    '''
...    return (s[::-2][::-1], s[-2::-2][::-1])
...
>>> odd_even("1234567")
('1357', '246')
>>> odd_even("2345")
('35', '24')
>>> odd_even("1")
('1', '')
>>>

John's original solution returned values with the digits in reverse 
order; but that's easily changed by reslicing each string with [::-1].



More information about the Tutor mailing list