こういうことがしたいこと、絶対また訪れると思います。
検索に全然引っかからず、地獄を見る初心者が少しでも減りますよう祈っています。
用語など知らない独学の初心者なので、おかしな言葉などあればご指摘ください
また、もっと見やすいものや別解などご教授頂ければ幸いです
この記事では、python 3.11.5を使っています
以下、自分用メモをコピペ
n * m
の要素を持たないリストを、n * m
で、そのまま整形する方法がわからず、phindに問いただした結果出てきた力技
Solution
# 1-8までの8つの数値を要素を持つリストを
# 3 * 3 の二次元リスト(もどき)にしてみたい
list1 = [num + 1 for num in range(8)]
# [1, 2, 3, 4, 5, 6, 7, 8]
# [
# [1,2,3],
# [4,5,6],
# [7,8]
# ] にしたい
list2 = [list1[i:i + 3] for i in range(0, len(list1), 3)]
自分なりに言語化してみる
- i にあたる
range(0, len(list1), 3)
は、0, 3, 6
の数字が出てくる- range 関数の3つ目の引数はステップ数
- 今回
len(list1)
= 8 だから上記の数字のみ
- なので以下の3つのリストを内包した二次元リストを作る
- i = 0 のとき
list1[i:i + 3]
は、list1[0:3]のリストを作成 - i = 3 のとき
list1[i:i + 3]
は、list1[3:6]のリストを作成 - i = 6 のとき
list1[i:i + 3]
は、list1[6:9]のリストを作成- 終わりのインデックス番号はオーバーしていてもエラーにならないっぽい
-
list1[3:]
がエラーにならないのと同じか?
- i = 0 のとき
一般化もしてみる
list1 = [num +1 for num in range(k)]
# len(list1) = k
# k < n(行) * m(列)
list2 = [list1[i: i + m] for i in range(0, len(list1), m)]
- nは
len(list1) // m
だと思っている