假設我有一個判斷式要判斷一個數值是否為 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
留言板
歡迎留下建議與分享!希望一起交流!感恩!