Your MATLAB code can be better written. Compare the following implementations:
%# preallocation
tic
x = zeros(1,100000); for i=1:100000, x(i) = 99; end
toc
%# appending
tic
x = []; for i=1:100000, x(end+1) = 99; end
toc
%# concatenation
tic
x = []; for i=1:100000, x = [x, 99]; end
toc
I get the following results:
Elapsed time is 0.001844 seconds. %# preallocated vector/matrix
Elapsed time is 0.109597 seconds. %# appending using "end+1" syntax
Elapsed time is 35.226361 seconds. %# appending using concatenation
Note that the above was tested on R2011b, which introduced improvements on growing matrices (without pre-allocation).
You should also check this previous answer for a solution that combines preallocation while still allowing for dynamic growing (idea is to allocate/grow in large block sizes)
On the other side, you should note that Python lists are optimized for appending items at the end. If you insert items at the beginning, you will get very different timings. Example:
>>> from timeit import timeit
>>> timeit('x.insert(0,99)', 'x=[]', number=100000)
5.3840245059078597
>>> timeit('x.append(99)', 'x=[]', number=100000) # x.insert(len(x),99)
0.039047700196533697