append zero but not False in a list python
<p>I'm trying to move all zeros in a list to the back of the line, my only problem is there is a False bool in the list. I just found out that False == 0, so how do i move all zeros to the back of the list and keep false intact?</p>

<pre><code>def move_zeros(array):
    #your code here
    for i in array:
        if i == 0:
            array.remove(i)
            array.append(i)
    answer = array
    print answer
</code></pre>

<p><code>move_zeros(["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9])</code></p>

<p>This is what it returns when you run it.</p>

<pre><code>['a', 'b', None, 'c', 'd', 1, 1, 3, [], 1, 9, {}, 9, 0, 0, 0, 0, 0, False, 0, 0, False, 0, 0]
</code></pre>

<p>Because list sorting is stable you can do</p>

<pre><code>array.sort(key=(lambda x: 1 if (x==0 and x is not False) else 0))
</code></pre>

<p>comparing identity on numbers (<code>x is 0</code>) is dangerous because while it normally works, there is no guarantee.</p>

<p>Using <code>key</code> makes sorting much faster.</p>

<p>Actually you could also do</p>

<pre><code>sorted_array=[]
zeroes=0
for e in array:
    if e==0 and e is not False:
        zeroes+=1
    else:
        sorted_array.append(e)
sorted_array.extend([0]*zeroes)
</code></pre>

<p>which in theory should be less work but is propably much slower in practice</p>

python list