On Friday, 7 July 2017 12:46:51 UTC+10, Rick Johnson wrote: > 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
Is there an "is not" method that's not != so I can check is not false. def move_zeros(array): l1 = [v for v in array if v is False or v != 0] l2 = [v for v in array if v is not False or v == 0] return l1 + l2 Cheers Sayth -- https://mail.python.org/mailman/listinfo/python-list