leetcodeを解く時に、2次元配列の各列の値をlistにまとめたかったので、
調べてみました。
実例
例えば2次元配列 two_dimentional_array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
が定義されている時、ゴールが[(1, 4, 7) (2, 5, 8) (3, 6, 9)]だとします。
result = [i for i in zip(*two_dimentional_array)]
とすると結果は
print(result)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
になりました。
*によるlistの展開とzipによる
*two_dimentional_arrayをピックアップしますと、*によって2次元配列が1次元配列に展開されます。
print(*two_dimentional_array)
[1, 2, 3] [4, 5, 6] [7, 8, 9]
zip関数によって、それぞれ展開されたリストをタプルにまとめる。
zip関数の引数に展開した3つのリストをそれぞれパラメータとして設定します。
上記のlistの要素をindexが0から同時に取得していき、タプルでまとめたzipオブジェクト(イテレータ)が
返却されます。
i = zip(*tow_dimentional_array)
print(i)
<zip object at 0x7f241aa13300>
i(イテレータ)をfor文で回していくことで、行と列が変換されるタプルが返却され、
上述のようにリスト内包表記でlistで取得しました。