ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: リストのアンパック

備忘録です。今回はリストの扱い方。アンパックする方法について備忘録で残します。

通常リストはこんな感じで使っていました。

[input]
l = [1, 2, 3] for i in l: print(i)
[output] >>> 1 >>> 2 >>> 3

左項の変数が1つで右項がリスト。

 

 

しかし、こんな感じで使うこともできます。

 

左項の変数をカンマで区切って複数設置すると、それぞれの変数に右項のタプルやリストの要素が代入される。

 

[input]
a, b, c= [1, 2, 3] print(a) print(b) print(c)
[output] >>> 1 >>> 2 >>> 3

 

リストをアンパックして使うという方法がこちらで実装可能です。

 

 

ただし、左項の変数の数とリストの中身の要素の数については注意が必要です。

 

 

ここで、左項の変数が一つで(,)をつけた場合について考えてみます。

 

下記のような形でリストを格納しようとした場合、エラーが出ます

l = [1, 2, 3, 4, 5]
x, = l

 

アンパックするには値が多すぎるよ!1つにして!という注意が出ています。

 

 

つまり、アンパックするときは、左項の変数の数と右項のリストの要素数を等しくないといけないということです。

 

 

では、リストが二次元配列の場合を考えます。

 

同様に左項が1つの変数でカンマをつけて、lを代入してみます。

[input]
l = [[1, 2, 3, 4, 5]]
x, = l

 

今度はエラーが出ませんでした。ちなみに出力は下記のようになります。

[output]
>>>[1, 2, 3, 4, 5]

 

なぜ、上の例の二次元配列ではエラーが出ないかを考えると、この二次元配列の要素数が

 

len(l) = 1 

 

になるからです。

 

リストの場合、lenは、[ ]の中に何個の要素が入っているかを数えます。

 

なので、[1, 2, 3, 4, 5]のような一次元配列の場合、[ ]の中に数字が5個入っているため、len(l)=5となります。

 

それに対して二次元配列は、外側の[ ]の中に[ ]が1個入っているため、len(l)=1となります。

 

例)二次元配列でlenのoutput。

len([[1, 2, 3]])・・・・1

len([[1, 2, 3],[4, 5, 6]])・・・2

 

 

なので、左項の変数の数と右項のリスト内の要素数が等しいためエラーにならなかったという感じです。

 

 

アンパックは色々使うことが可能なので要素数に注意しながら実装していきます!