On Thu, 25 Oct 2012 22:04:52 -0400, Terry Reedy wrote:

> Containment of nan in collection is tested by is, not ==.

AFAICT, it isn't specific to NaN. The test used by .index() and "in"
appears to be equivalent to:

        def equal(a, b):
            return a is b or a == b

IOW, it always checks for object identity before equality.

Replacing NaN with an instance of a user-defined class with a
non-reflexive __eq__() method supports this:

        > class Foo(object):
        =  def __eq__(self, other):
        =   return False
        = 
        > a = Foo()
        > b = Foo()
        > a in [1,2,a,3,4]
        True
        > b in [1,2,a,3,4]
        False
        > [1,2,a,3,4].index(a)
        2
        > [1,2,a,3,4].index(b)
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        ValueError: <__main__.Foo object at 0x7fa7055b0550> is not in list


-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to