检索列表中 NaN 的索引
Posted
技术标签:
【中文标题】检索列表中 NaN 的索引【英文标题】:Retrieving the index of NaN in a list 【发布时间】:2018-12-14 14:48:17 【问题描述】:我有一个类似的列表:
li = [nan, 'Grvl', 'Pave']
另外两项是字符串,但 nan 不是变量。它是一个 Not A Number 浮点数。
type(li[0])
>> <class 'float'>
现在我希望能够通过以下方式索引 nan:
li.index(float('nan'))
但是有一个错误:
ValueError: nan is not in list
如何获取nan的索引?我正在使用 Python 3.5。
【问题讨论】:
【参考方案1】:利用数学上 NaN != NaN 这一事实,因此您可以将生成器传递给 next
以获取 NaN 的第一个索引,如果不存在则为 -1。
nan_idx = next((i for i, v in enumerate(li) if v != v), -1)
print(nan_idx)
0
【讨论】:
【参考方案2】:您可以使用math.isnan()
编写通用自定义函数来获取列表中带有或不带有NaN
值的元素的索引。
from match import isnan
def nan_index(my_list, el):
if isinstance(el, float) and isnan(el):
for i, e in enumerate(my_list):
if isnan(e):
return i
else:
raise ValueError
else:
return my_list.index(el)
示例运行:
>>> nan_index([1, 2, 4, 5], 4) # For list of numbers
2
>>> nan_index(['a', 'b', 'c'], 'b') # For list of strings
1
>>> nan_index([1, 2, 4, float('nan')], float('nan')) # For list with `NaN`
3
>>> nan_index([1, 2, 4, 5], float('nan')) # "ValueError", for list without match
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in nan_index
ValueError
【讨论】:
以上是关于检索列表中 NaN 的索引的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 itextsharp 从 PDF 的列表框中检索用户选择的索引?