2016-06-13 152 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

当然,我喜欢它可以比这个特定的实例更普遍使用:)。很容易看出你将如何适应其他类型/转换。 –