Test 0 and false since false is 0

Grant Edwards grant.b.edwards at gmail.com
Mon Jul 10 12:10:59 EDT 2017


On 2017-07-09, Paul D. DeRocco <pderocco at ix.netcom.com> wrote:
>> From: Sayth Renshaw
>> 
>> I have been reading this solution 
>> > >>> after = sorted(before, key=lambda x: x == 0 and type(x) == int)
>> 
>> it is really good, however I don't understand it enough to 
>> reimplement something like that myself yet.
>> 
>> Though I can that lambda tests for 0 that is equal to an int 
>> why does sorted put them to the end?
>
> Because the expression "x == 0 and type(x) == int" has a value of either
> False or True, and it sorts all the False values before the True values,
> leaving the order within those sets unchanged.
>
> That said, "x is 0" is even simpler.

And wrong.

Two equivalent integer objects _might_ be the same object, but that's
not guaranteed.  It's an _implementation_detail_ of CPython that small
integers are cached:

  >>> x =  0
  >>> x is 0
  True

But larger integers aren't:

  >>> a =  123412341234
  >>> a is 123412341234
  False

The first example could have returned False and been correct.

-- 
Grant Edwards               grant.b.edwards        Yow! TONY RANDALL!  Is YOUR
                                  at               life a PATIO of FUN??
                              gmail.com            




More information about the Python-list mailing list