Python 3.8 (pre-release), 66 65 50 49 46 42 42 41 bytes
-1 byte by doing away with int.bit_length()
.
-15 bytes: recursion for the win!
-1 byte by using list unpacking instead of list()
.
-3 bytes by moving some stuff around.
-4 bytes by using and
instead of the ternary ... if ... else ...
.
-1 byte by Jakque.
f=lambda x,n=1:[*x]and[x[x and[x[:n]]+fn],*f(x[n:],2*n)]