假設我有一個判斷式要判斷一個數值是否為 None

但是要考慮該參數可能是 np array 或 list 或任何參數情況
該如何判斷才準確?

 

 


 



要判斷一個變數是否為 None,但同時要考慮它可能是 numpy array、list 或 其他類型,需要確保判斷方式能正確應對不同情況。

最佳判斷方法

 

import numpy as np

def is_none(value):
    if value is None:  # 直接判斷是否為 None
        return True
    if isinstance(value, np.ndarray):  # 若是 numpy array
        return value.size == 0 or np.all(value == None)  # 檢查是否為空或全為 None
    if isinstance(value, (list, tuple, set)):  # 若是 list、tuple 或 set
        return len(value) == 0 or all(v is None for v in value)  # 檢查是否為空或全為 None
    return False  # 其他型態不算是 None

# 測試案例
print(is_none(None))  # ✅ True
print(is_none([]))  # ✅ True(空 list)
print(is_none([None, None]))  # ✅ True(所有元素都是 None)
print(is_none([None, 1]))  # ❌ False(含有非 None 的值)
print(is_none(np.array([])))  # ✅ True(空 numpy array)
print(is_none(np.array([None, None], dtype=object)))  # ✅ True(所有元素都是 None)
print(is_none(np.array([None, 1], dtype=object)))  # ❌ False(含有非 None 的值)
print(is_none(0))  # ❌ False
print(is_none("Hello"))  # ❌ False

 

解釋判斷邏輯
直接判斷 None → value is None

檢查 numpy.ndarray

如果 .size == 0 → 表示是空的 np.array([])

如果 np.all(value == None) → 表示所有元素都是 None

檢查 list / tuple / set

len(value) == 0 → 空集合

all(v is None for v in value) → 所有元素都是 None

其他情況都回傳 False

處理 numpy.array([None, None])
在 numpy 陣列中:

 

np.array([None, None], dtype=object)



其內部可能是 object 類型,所以我們用 np.all(value == None) 來檢查整個陣列是否都是 None。

 

總結
✅ 適用於 None、list、tuple、set、numpy array
✅ 可以判斷:

None

空 list / tuple / set

所有元素皆為 None 的 list / numpy array

空的 numpy array

這樣的判斷方法較為精確且通用!

 


結論 : if value is None