for a in ([1,2,3,4,5,6,7,8,9], [1,2,3,4,5,6,7,8], [1,2,3,4], [1,2,3], [1,2,], [1], []): print a [ a.insert(i,a.pop()) for i in xrange(1,len(a)+1,2)] print a,'\n'
result
[1, 2, 3, 4, 5, 6, 7, 8, 9] [1, 9, 2, 8, 3, 7, 4, 6, 5] [1, 2, 3, 4, 5, 6, 7, 8] [1, 8, 2, 7, 3, 6, 4, 5] [1, 2, 3, 4] [1, 4, 2, 3] [1, 2, 3] [1, 3, 2] [1, 2] [1, 2] [1] [1] [] []
Update 1
Comparison with zeekay code:
from time import clock n = 100000 te = clock() for i in xrange(n): a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] [ a.insert(i,a.pop()) for i in xrange(1,len(a)+1,2)] print clock()-te from itertools import chain, izip def reorder(a): gen = chain(*izip(a, reversed(a))) for _ in a: yield next(gen) te = clock() for i in xrange(n): a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] a = list(reorder(a)) print clock()-te
result
2.36667984339 5.00051766356
My method changes a in place