list(zip(*matrix)) *って何の意味あるの?

*はアンパック演算子と呼ばれ、Pythonで可変長引数を受け取る場合やリストやタプルのアンパックを行う場合に使用されます。zip(*iterables)を使うと、複数のイテラブルオブジェクトから対応する要素をまとめてタプルにしたイテレータを作成します。

具体的には、zip(*matrix)は以下のように動作します:

  1. *matrixは、matrixの各要素(リスト)をアンパックし、それぞれのリストをzip()関数の引数として渡します。
  2. zip()関数は、各イテラブルオブジェクト(リスト)から対応する要素を取り出してタプルにまとめます。

これにより、matrixの列ごとに対応する要素をまとめたタプルのイテレータが得られます。そして、list()関数でこれをリストに変換することができます。

具体例を見てみましょう。以下のmatrixが与えられた場合:

python
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]

zip(*matrix)は次のように動作します:

  1. *matrixは、[1, 2, 3], [4, 5, 6], [7, 8, 9]という3つのリストをそれぞれの引数として渡します。
  2. zip()関数は、対応する要素をまとめてタプルにします。つまり、(1, 4, 7), (2, 5, 8), (3, 6, 9)というタプルを順番に生成します。

最終的に、list(zip(*matrix))は次のような結果を返します:

python
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

これにより、matrixの列ごとに対応する要素をまとめたタプルのリストが得られます。

未分類

Posted by ぼっち