この記事は古川研究室 AdventCalendar 5日目の記事です.
本記事は古川研究室の学生が学習の一環として書いたものです.
内容が曖昧であったり表現が多少異なったりする場合があります.
まえがき
これまで受けたtrackやpaizaでのコーディングテストで,入力のリストの整形にとまどったので自分用にまとめます.
標準入力はinput()らしいのですが,入力として文字列lineが与えられたとします.
区切り文字のある文字列を分割する
ここでは入力リストlineの要素が空白で区切られた文字列を分割します.
line = '3 2 3 2 3 2'
この場合,split()を使って分割します.split()は文字列を分割したリストを返してくれます.
split()の引数には区切り文字を指定します.デフォルトはスペースsplit(' ')と同じです.
ls = line.split()
# ['3', '2', '3', '2', '3', '2']
つぎに,上とほぼ同じですが,','で区切った場合も書いておきます.
line = '3,2,3,2,3,2'
上のsplit()の引数に','を設定するだけです.
ls = line.split(',')
# ['3', '2', '3', '2', '3', '2']
連なった文字を分割する
上の場合では区切り文字(スペースやコンマ)がありましたはここでは連なった文字を分割します.
line = '323232'
for文で要素一つずつとってあげればよいです.
ls = [i for i in line]
# ['3', '2', '3', '2', '3', '2']
おまけに,lsに入っている要素をstrからintに変換します.for文で要素一つずつ変換します.
lsin = [int(i) for i in line]
# [3, 2, 3, 2, 3, 2]
2次元配列に格納する
line = ['2,3','123,456']
このような入力が与えられたとき,
[[1,2,3]
[4,5,6]]
を得たいとします.lineの第1要素はおおよそ配列の大きさを表します.(ここでは行数n=2, m=3です.)
nとmは上の方法で取得します.
n, m = line[0].split(',')
次にline[1]を二次元配列に格納します.
まず,['123','456']の配列lsを作ります.
ls = line[1].split(',')
# ['123', '456']
それから,またそれぞれの要素を分割します.
g = [[i for i in ls[j]] for j in range(int(m))]
# [['1', '2', '3'], ['4', '5', '6']]
おわりに
今回は自分用にざっと入力リストの整形についてまとめてみました.
この記事が誰かのお役に立つと幸いです.