Pythonを使用しています。  
これらの二次元配列があったとします

```

    data=[[18,16,17], [75, 50, 80], [12, 13, 14], [8, 7, 9]]
    
```

この二次元配列の中身を文字列型にして以下のように出力したいのですが、どのようにすればいいでしょうか。

```

    data=[['18','16','17'], ['75','50','80'], ['12','13','14'], ['8','7','9']]
    
```

試したこととしては、

```

    data = list(map(str,data))
    print(data)
    
```

このようにすると出力結果が以下のようになってしまいます。

```

    ['[18, 16, 17]', '[7, 5, 8]', '[12, 12, 14]', '[8, 7, 9]']
    
```
CC BY-SA 4.0
2022-07-28T10:01:20.140
90255
2022-07-28T15:10:40.737
2022-07-28T14:39:54.160
question
python
二次元配列の中を文字列型にしたい
承認マークは付いていませんが、こちらの記事が応用できるでしょう。  
[convert element of 2D list into string
python](https://stackoverflow.com/q/35726627/9014308)  
(ただしこの記事は後に`for`ループと`join`で文字列化処理することが前提で作られています)

それを適用するとこうなります。  
2次元リストをそのまま`map()`に渡すから質問のようになってしまうのであって、いったん1次元リストに分解してから適用し、2次元に戻せば良いと思われます。

```

    data=[[18,16,17], [75, 50, 80], [12, 13, 14], [8, 7, 9]]
    
    data = [list(map(str,l)) for l in data]
    print(data)
    
```

* * *

上記紹介記事の動作が微妙だったのはPython 2.x系の記述だったからのようですね。  
こちらの記事(質問とは逆にintに変換するもの)でPython 3.x系と併せて解説されていました。  
[Python: One-liner to perform an operation upon elements in a 2d array (list
of lists)?](https://stackoverflow.com/q/6381638/9014308)

ちなみにこちらの記事では`list()`と`map()`を組み合わせるよりも2重にネストされたリスト内包表記にした方が良いと書かれていました。  
こんな感じですね。

```

    data=[[18,16,17], [75, 50, 80], [12, 13, 14], [8, 7, 9]]
    
    data = [[str(e) for e in l] for l in data]
    print(data)
    
```

何故か探ってみるとこんな記事があって、結果としてリストが欲しい場合はネストされたリスト内包表記にした方が少し速くなるようです。  
[Python の map
とfor内包表記(リスト内包表記)は結局どっちが速い？](https://blog.utgw.net/entry/2017/03/09/154314)
CC BY-SA 4.0
2022-07-28T10:31:36.973
90257
2022-07-28T15:10:40.737
2022-07-28T15:10:40.737
26370
26370
90255
answer