Dlaczego w numpy `nan == nan` jest Fałsz, podczas gdy nan w [nan] jest Prawda?
Podczas gdy pierwsza część pytania (która znajduje się w tytule) była już kilkakrotnie udzielana (tj.Dlaczego NaN nie jest równy NaN?), Nie rozumiem, dlaczego drugi utwór działa tak jak on (zainspirowany tym pytaniem)Jak sprawdzić listę zawierającą NaN)?
Mianowicie:
>> nan == nan
False
>> nan in [nan]
True
Dodatek wyjaśniający do pytania dotyczącego odpowiedzi z @DSM. Więc dlaczegofloat("nan")
inaczej się zachowujenan
? Czy nie powinno się to powtórzyć, aby było prostenan
i dlaczego tłumacz zachowuje się w ten sposób?
>> x = float("nan")
>> y = nan
>> x
nan
>> y
nan
>> x is nan, x is float("nan"), y is nan
(False, False, True)
Zasadniczo odnosi się do tego samego rodzajunan
w pierwszym przypadku, ale tworzy oddzielny obiekt w drugim:
>> nans = [nan for i in range(2)]
>> map(id, nans)
[190459300, 190459300]
>> nans = [float("nan") for i in range(2)]
>> map(id, nans)
[190459300, 190459301]