Empuje todos los ceros a un lado de la lista [duplicar]

Esta pregunta ya tiene una respuesta aquí:

Mover todos los ceros al comienzo de una lista en Python 4 respuestas

Hola, estoy tratando de empujar todos los ceros en una lista a un lado sin alterar el resto:
[0,2,0,0,9] -> [0,0,0,2,9]
[3,4,0,1,0] -> [0,0,3,4,1]

Mi solución:

def getNonZeros(self, tup):
    for i in tup:
        if i != 0:
            yield i;

def pushZeros(self, tup, side):
    if side==Side.End:
        return [i for i in self.getNonZeros(tup)] + [0]*tup.count(0);
    else:
        return [0]*tup.count(0) + [i for i in self.getNonZeros(tup)];

Y me sale este error en ipython:

ERROR: Internal Python error in the inspect module.
Below is the traceback from this internal error.
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/IPython/core/ultratb.py", line 760, in     structured_traceback
    records = _fixed_getinnerframes(etb, context, tb_offset)
  File "/usr/lib/python2.7/site-packages/IPython/core/ultratb.py", line 242, in     _fixed_getinnerframes
    records  = fix_frame_records_filenames(inspect.getinnerframes(etb, context))
  File "/usr/lib64/python2.7/inspect.py", line 1043, in getinnerframes
    framelist.append((tb.tb_frame,) + getframeinfo(tb, context))
  File "/usr/lib64/python2.7/inspect.py", line 1007, in getframeinfo
    lines, lnum = findsource(frame)
  File "/usr/lib64/python2.7/inspect.py", line 580, in findsource
    if pat.match(lines[lnum]): break
IndexError: list index out of range

Unfortunately, your original traceback can not be constructed.

Respuestas a la pregunta(3)

Su respuesta a la pregunta