【问题标题】:Retrieving the index of NaN in a list检索列表中 NaN 的索引
【发布时间】: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。

【问题讨论】:

    标签: python python-3.x list indexing nan


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多