Zig-zag array - solution
You can just use Python's slice notation. It allows you to pass steps, which allows you to do this with ease.

I also think it's fairly easy to understand.

def zigzag(values):
    half = len(values) // 2
    new = [None] * len(values)

    new[0::2] = values[:-half]
    new[1::2] = values[-half:][::-1]
    return new


&gt;&gt;&gt; zigzag([1, 2, 3, 4])
[1, 4, 2, 3]
&gt;&gt;&gt; zigzag([1, 2, 3, 4, 5])
[1, 5, 2, 4, 3]