

Python3.6を使っています。いま次のような文字列のリストをリストの構造はそのままで数値(float)に変換したいと思っています。

・今あるリスト(文字列)

[code]

    str_list = [["1.2", "3.4"], ["5.6", "7.8"]]
    
[/code]

・欲しいリスト

[code]

    float_list = [[1.2, 3.4], [5.6, 7.8]]
    
[/code]

これを多次元のときに簡単に対応できる関数などの方法がないか探しています。

例えばforを使えば以下のようになると思います。

[code]

    str_list = [["1.2", "3.4"], ["5.6", "7.8"]]
    float_list = []
    
    for i in range(len(str_list)):
        float_list.append([float(str_lis[i][j]) for j in range(len(str_list[i]))])
    
[/code]

内包表記のみで表す場合は

[code]

    [[float(str_list[i][j]) for j in range(len(str_list[i]))] for i in range(str_list)]
    
[/code]

と書けば(この場合は)欲しいリストが得られました。  
ただ次元が上がっていくにつれてひとつひとつ書いていられないと思います。

なので一括してリストの全要素にアクセス(変換)しかつリスト構造はそのままに保ってくれる関数を探しているのですが、そのような関数あるいは方法はないでしょうか。

ご存知の方がいらっしゃれば教えてください。よろしくお願いいたします。


CC BY-SA 3.0
2018-04-26T16:40:15.330
43584
2018-05-01T09:11:03.970
2018-05-01T09:11:03.970
28327
28327
question
python python3
Pythonでのネストされたリストのデータ型変換


こんな感じでいかがでしょうか。

[code]

    def functor(f, l):
      if isinstance(l,list):
        return [functor(f,i) for i in l]
      else:
        return f(l)
    
    str_list = [[["1.2", "3.4"]], ["5.6", "7.8"], "9.9"]
    float_list = functor(float, str_list) # [[[1.2, 3.4]], [5.6, 7.8], 9.9]
    
[/code]


CC BY-SA 3.0
2018-04-26T18:13:20.470
43585
2018-04-26T18:13:20.470
3605
43584
answer