リストの中身が多すぎるので分割して2次元リストを作ろうと思った時に調べた際の備忘録です。
やりたいこと
配列があった時に5個ずつに分割してそれをまたリストに入れたい。
["あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ"]
↓
[["あ","い","う","え","お"],["か","き","く","け","こ"],["さ","し","す","せ","そ"]]
リストの中身を指定した数で分割する
ループで1個ずつ取り出して新しく配列を作り直すのかなとも思いましたが、もっと簡単な方法がありそうと思い調べてみました。
参考元:https://datagy.io/python-split-list/
リストの中身を2分割する
2分割は簡単にできるようです。
サンプルコード
h_list = ["あ","い","う","え","お","か","き","く","け","こ"]
h_len = len(h_list) // 2
first_half, second_half = h_list[:h_len], h_list[h_len:]
print(f'{first_half=}’)
print(f'{second_half=}’)
chunked_list = list()
chunked_list.append(first_half)
chunked_list.append(second_half)
結果
first_half=[‘あ’, ‘い’, ‘う’, ‘え’, ‘お’]
second_half=[‘か’, ‘き’, ‘く’, ‘け’, ‘こ’]
[[‘あ’, ‘い’, ‘う’, ‘え’, ‘お’], [‘か’, ‘き’, ‘く’, ‘け’, ‘こ’]]
Pythonはコロン「:」を使うことでリストの中身を簡単にスライスできるようです。
「h_list[:h_len]」で前半の5つ、「h_list[h_len:]」で後半の5つを取得しています。
個人的には使い慣れていないので難しく感じますが覚えたい方法です。コロンの使い方についてはどこかできちんと深掘りしたいと思います。
割り切れない場合
割り切れない場合は後半に追加されました。
[[‘あ’, ‘い’, ‘う’, ‘え’, ‘お’], [‘か’, ‘き’, ‘く’, ‘け’, ‘こ’,’さ’,’し’]]
リストの中身をx分割する
指定した数で分割する方法です。for文は使うもののrange()を組み合わせたおしゃれな方法です。
サンプルコード
h_list = ["あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ"]
chunked_list = list()
chunk_size = 5
for i in range(0, len(h_list), chunk_size):
chunked_list.append(h_list[i:i+chunk_size])
print(chunked_list)
結果
[[‘あ’, ‘い’, ‘う’, ‘え’, ‘お’], [‘か’, ‘き’, ‘く’, ‘け’, ‘こ’], [‘さ’, ‘し’, ‘す’, ‘せ’, ‘そ’]]
range()は数を生成してくれるメソッドでよくループしたい時に指定回数ループする時に使ったりしたのですが、range()で引数が3つある場合は以下のようになっており、
range(start, stop, step)
上記の実行の例でいうと0から始まり15まで5ずつカウントします。
range(0, 15, 5)
-- 0, 5, 10
そしてまたコロンを使って指定の数でスライスしてくれています。
割り切れない場合
割り切れない場合は端数のリストが追加されました。
[[‘あ’, ‘い’, ‘う’, ‘え’, ‘お’], [‘か’, ‘き’, ‘く’, ‘け’, ‘こ’], [‘さ’, ‘し’, ‘す’, ‘せ’, ‘そ’], [‘た’, ‘ち’]]
おわり
もっとかっこいいやり方なんかも参考元にはあったのですが、やりたいことができそうなので深掘りは程々にしました。