おぼえがき

過ちては則ち改むるにうんぬんかんぬん

リスト内包表記について(Python)

f:id:feci:20210726231508j:plain

Python3

 

Python3.8.5におけるリスト内包表記について。

はてなブログは空のブラケットを表示しない仕様なので半角スペースを入れています。

#①リストを作る
tuple = ('0''1''2''3''4')  #タプルが入った変数tupleを作る
list = [ ]  #空のリストが入った変数listを作る

for _ in tuple:  #forループでtupleの値を1つずつ_に再代入してく
  list.append(_#_に値が代入される毎に_の値をlistに追加していく

print(list)      #['0','1','2','3','4']


#②①をリスト内包表記にしたパターン
list2 = [_ for _ in tuple]  #①のforループと同じ処理がされる

print(list2)  #①と同じ結果


#③for文にif文が入ってるパターン
list3 = [ ]

for _ in tuple:     #forループでtupleの値を1つずつ_に再代入してく
  if int(_% 2 == 0#_の値を2で割って余りが0のときだけ下の処理を実行する
    list3.append(_#現在_に代入されている値をlistに追加していく

print(list3)         #['0', '2', '4']


#④③をリスト内包表記にしたパターン
list4 = [_ for _ in tuple if int(_% 2 == 0]  #if文をつなげて書く

print(list4)  #③と同じ結果


#⑤ちょっとややこしいパターン
tuple2 = (56789)
list5 = [ ]

for _ in tuple:               #tupleの値を1つ_に入れる(下のループが終了する毎に次の値へ)
  for _1 in tuple2:           #tuple2の値を1つ_1に入れる(上のループ1回につき毎回ループをぜんぶ回す)
    list5.append(int(_* _1#現在の_の値と現在の_1の値を乗算して出力

print(list5)  #計25個の値が入ったリストが出力


#⑥⑤をリスト内包表記にしたパターン
list6 = [int(_* _1 for _ in tuple for _1 in tuple2]  #最初のforの前の値がappend()の値になる

print(list6)  #⑤と同じ結果

リスト内包表記とは、リストを作成する方法のひとつです。

①のようなプログラムをリスト内包表記で記述すると、②のようになります。

 

ややコードが読みづらくなりますが、③のパターンのようにインナー関数の処理も含めて記述することもできます。

 

また⑥のパターンを見てもらうとわかるように、リスト内表記の最初のforの前に記述している値はappend()の括弧内の値となっています。

 

ちなみにところどころで変数_内の値をint()で型キャストしているのは、変数tupleの値がすべてint型ではなくstr型になっているからです。

変数tuple2の値はint型になっているので、演算などの際に変数tupleの値のように型キャストをしてやる必要はありません。

 

 

以上です。