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

入力には1つの要素しか含まれていないため、これは(私の場合は)起こることはありません。しかし、それは意図されていません。 –

答えて

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

確かに、私はそれがこの特定のインスタンスよりも一般的に使用できることが好きでした:)。それを他のタイプ/コンバージョンにどのように適合させるかは簡単に分かります。 –

関連する問題