Split a string "aabbcc" -> ["aa", "bb", "cc"] without re.split
Question: I would like to split a string according to the title in a single call. I'm
looking for a simple syntax using list comprehension, but i don't got it yet:

    
    
    s = "123456"
    

And the result would be:

    
    
    ["12", "34", "56"]
    

What i don't want:

    
    
    re.split('(?i)([0-9a-f]{2})', s)
    s[0:2], s[2:4], s[4:6]
    [s[i*2:i*2+2] for i in len(s) / 2]
    

**Edit** :

Ok, i wanted to parse a hex RGB[A] color (and possible other color/component
format), to extract all the component. It seem that the fastest approach would
be the last from sven-marnach:

  1. sven-marnach xrange: 0.883 usec per loop
    
        python -m timeit -s 's="aabbcc";' '[int(s[i:i+2], 16) / 255. for i in xrange(0, len(s), 2)]'
    

  2. pair/iter: 1.38 usec per loop
    
        python -m timeit -s 's="aabbcc"' '["%c%c" % pair for pair in zip(* 2 * [iter(s)])]'
    

  3. Regex: 2.55 usec per loop
    
        python -m timeit -s 'import re; s="aabbcc"; c=re.compile("(?i)([0-9a-f]{2})"); 
    split=re.split' '[int(x, 16) / 255. for x in split(c, s) if x != ""]'
    


Answer: Reading through the comments, it turns out the actual question is: What is the
fastest way to parse a color definition string in hexadecimal `RRGGBBAA`
format. Here are some options:

    
    
    def rgba1(s, unpack=struct.unpack):
        return unpack("BBBB", s.decode("hex"))
    
    def rgba2(s, int=int, xrange=xrange):
        return [int(s[i:i+2], 16) for i in xrange(0, 8, 2)]
    
    def rgba3(s, int=int, xrange=xrange):
        x = int(s, 16)
        return [(x >> i) & 255 for i in xrange(0, 32, 8)]
    

As I expected, the first version turns out to be fastest:

    
    
    In [6]: timeit rgba1("aabbccdd")
    1000000 loops, best of 3: 1.44 us per loop
    
    In [7]: timeit rgba2("aabbccdd")
    100000 loops, best of 3: 2.43 us per loop
    
    In [8]: timeit rgba3("aabbccdd")
    100000 loops, best of 3: 2.44 us per loop
    

