0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

pythonで、要素がn × mに満たないリストを、n × mで、そのまま2次元リストにする方法

Posted at

こういうことがしたいこと、絶対また訪れると思います。
検索に全然引っかからず、地獄を見る初心者が少しでも減りますよう祈っています。

用語など知らない独学の初心者なので、おかしな言葉などあればご指摘ください
また、もっと見やすいものや別解などご教授頂ければ幸いです

この記事では、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)]

自分なりに言語化してみる

  1. i にあたるrange(0, len(list1), 3) は、0, 3, 6の数字が出てくる
    1. range 関数の3つ目の引数はステップ数
    2. 今回len(list1) = 8 だから上記の数字のみ
  2. なので以下の3つのリストを内包した二次元リストを作る
    1. i = 0 のときlist1[i:i + 3] は、list1[0:3]のリストを作成
    2. i = 3 のときlist1[i:i + 3] は、list1[3:6]のリストを作成
    3. i = 6 のときlist1[i:i + 3] は、list1[6:9]のリストを作成
      1. 終わりのインデックス番号はオーバーしていてもエラーにならないっぽい
      2. list1[3:] がエラーにならないのと同じか?

一般化もしてみる

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)]
  1. nはlen(list1) // mだと思っている
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?