On Thursday, July 6, 2017 at 9:29:29 PM UTC-5, Sayth Renshaw wrote: > I was trying to solve a problem and cannot determine how to filter 0's but > not false. > > Given a list like this > ["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9] > > I want to be able to return this list > ["a","b",None,"c","d",1,False,1,3,[],1,9,{},9,0,0,0,0,0,0,0,0,0,0] > > However if I filter like this > > def move_zeros(array): > l1 = [v for v in array if v != 0] > l2 = [v for v in array if v == 0] > return l1 + l2 > > I get this > ['a', 'b', None, 'c', 'd', 1, 1, 3, [], 1, 9, {}, 9, 0, 0, 0, False, 0, 0, 0, > 0, 0, 0, 0] > > I have tried or conditions of v == False etc but then the 0's being false > also aren't moved. How can you check this at once?
Yep. This is a common pitfall for noobs, as no logic can explain to them why integer 0 should bool False, and integer 1 should bool True. But what's really going to cook your noodle is when you find out that any integer greater than 1 bools True. Go figure! They'll say it's for consistency sake. But i say it's just a foolish consistency. You need to learn the subtle difference between `==` and `is`. ## PYTHON 2.x >>> 1 == True True >>> 1 is True False >>> 0 == False True >>> 0 is False False -- https://mail.python.org/mailman/listinfo/python-list