2016-06-13 185 views
2

我有一個函數需要輸入作爲類型float進一步計算。 不幸的是,輸入類型範圍:Python:列表或浮點數組或浮點數

  1. list
  2. float
  3. numpy.array

我不滿意我的解決辦法,我不知道是否有更好的解決方案。

def get_correct_float(x): 
    try: 
     if len(x) == 1: 
      return x[0] 
    except: 
     return x  

a = [.5] 
b = .5 
c = np.array([.5]) 

get_correct_float(a) == get_correct_float(b) == get_correct_float(c) 
TRUE 
get_correct_float(a) 
0.5 
+3

只是做'浮動(np.asarray(X))' – asimoneau

+0

'get_correct_float([1,2]) - > None'是否意圖? –

+0

輸入只能包含一個元素 - 因此這不會發生(在我的情況下)。但是,不,這不是意圖。 –

回答

2

使用isinstance

>>> import numpy as np 
>>> l = [[.5], .5, np.array([.5])] 
>>> f = [x if isinstance(x, float) else x[0] for x in l] 
>>> f 
[0.5, 0.5, 0.5] 

def get_correct_float(x): 
    return x if isinstance(x, float) else x[0] 

以前的答案,

import numpy as np 

def get_correct_float(x): 
    if isinstance(x, list): 
     return x[0] 
    elif isinstance(x, np.ndarray): 
     return x[0] 
    else: 
     return x 
+1

我喜歡你原來的'if ... elif'版本 –

+0

@JohnCarpenter,謝謝。我可以有理由嗎?可讀? – SparkAndShine

+1

當然,我喜歡它可以比這個特定的實例更普遍使用:)。很容易看出你將如何適應其他類型/轉換。 –