数字と単語の文字列を含むリストのリストがあります。数字である文字列のみを浮動小数に変換したい
aList= [ ["hi", "1.33"], ["bye", " 1.555"] ]
まず、「可能であれば文字列を float に変換し、そうでなければ文字列のままにする」関数が必要です。
def floatify(s):
try:
return float(s)
except ValueError:
return s
これで、新しいリストを生成するか、古いリストを適切に変更して、各値でそれを呼び出すことができます。
ネストされたリストがあるため、これはネストされた反復を意味します。次の 2 つの手順で明示的に行うことから始めることをお勧めします。
def floatify_list(lst):
return [floatify(s) for s in lst]
def floatify_list_of_lists(nested_list):
return [floatify_list(lst) for lst in nested_list]
floatify_list
もちろん、ローカル関数を作成するだけで、それを 1 つの関数に結合できます。
def floatify_list_of_lists(nested_list):
def floatify_list(lst):
return [floatify(s) for s in lst]
return [floatify_list(lst) for lst in nested_list]
関数呼び出しの代わりに内部式を代入することによっても実行できます。自分でそれを行う方法を理解できない場合は、理解する可能性が低いため、それを行わないことをお勧めします (複雑なネストされたリスト内包表記は、専門家が理解するのは十分に困難です)。
def floatify_list_of_lists(nested_list):
return [[floatify(s) for s in lst] for lst in nested_list]
または、Python をひどく偽装した Haskell のように見せたい場合は、次のようにします。
def floatify_list_of_lists(nested_list):
return map(partial(map, floatify), nested_list)