On 2012-10-26 03:04, Terry Reedy wrote:
On 10/25/2012 9:46 PM, mambokn...@gmail.com wrote:
a = [float('nan'), 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a
[nan, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a.index(float('nan'))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.index(x): x not in list
That means, the function .index() cannot detect nan values.
It happens on both Python 2.6 and Python 3.1
Is this a bug? Or I am not using .index() correctly?
It is a consequence of the following, which some people (but not all)
believe is mandated by the IEEE standard.
>>> nan = float('nan')
>>> nan is nan
True
>>> nan == nan
False
>>> nanlist = [nan]
>>> nan in nanlist
True
>>> nanlist.index(nan)
0
Containment of nan in collection is tested by is, not ==.
>>> nan2 = float('nan')
>>> nan2 is nan
False
>>> nan2 == nan
False
>>> nan2 in nanlist
False
In summary, .index() looks for an item which is equal to its argument,
but it's a feature of NaN (as defined by the standard) that it doesn't
equal NaN, therefore .index() will never find it.
Another consequence is that the presence of a NaN in a list prevents
.sort() from sorting correctly.
--
http://mail.python.org/mailman/listinfo/python-list