#[Python]05章-07 内包表記の条件分岐
まず、以下のプログラムを見てください(プログラムを作成する必要はありません)
L = [] #空リストLを作成する
print(L) #Lの要素を出力
for i in range(10):
if i % 3 == 0: #3で割った余りが0の場合
L.append(i) #appendメソッドで、リストLに要素を追加
print(L)
【実行結果】
[]
[0, 3, 6, 9]
簡単に説明すると、空のリストLを作成し、いったん空のリストの要素をprint関数で出力しています。(もちろん空ですが)
そして、for文内に移動しますが、iが3の倍数(つまり3で割った余りが0)の場合、appendメソッドを用いてLの要素を1つずつ追加していきます。
最後にprint関数で要素の中身を出力しています。
しかし、このif文も含んだ処理を内包表記で表記することもできます。
##内包表記による条件分岐
では、先ほどの上記のプログラムを内包表記で表現してみます。
[変数による計算結果 for 変数 in for 繰り返し対象 if 条件]
先ほどの上記のプログラムと同じ処理内容を、内包表記で記載してみましょう。今回はPython Consoleから以下のコードを入力してください。
>>> [i for i in range(10) if i % 3 == 0]
[0, 3, 6, 9]
先ほどの05章-06のときの内包表記の後に、if文で条件を書くことで、内包表記の条件分岐となります。:(コロン)は必要ありません。
また、「変数による計算結果」の個所も少し改良してみましょう。今度は1以上100以下の値の中で10の倍数の値を3倍した値を求めてみましょう。Python Consoleから以下のコードを入力してください。
>>> [i*3 for i in range(1, 101) if i % 10 == 0]
[30, 60, 90, 120, 150, 180, 210, 240, 270, 300]
もう1つ内包表記の条件分岐を見てみましょう。今度は、10以上50未満の値の中で、2乗した値が200未満の値を求めてみましょう。Python Consoleから以下のコードを入力してください。
>>> [i for i in range(10, 50) if i**2 < 200]
[10, 11, 12, 13, 14]
確かに上記のリストの要素を2乗してみるとすべて200未満であることがわかります。
そしてもう1つ、先ほどのリストの結果の合計もすることができます。以下のようにsum関数を使用します。
>>> sum([i for i in range(10, 50) if i**2 < 200])
60
##演習問題
演習問題を用意しました。ぜひ解いてみてください。なお、Python Consoleを利用してください。
【1】1以上100以下のの整数のうち、奇数のみの合計値を求めるプログラムをfor文を用いて作成してください。合計は2500となります。
##最後に
内包表記では条件分岐も書くことができます。さらに前回触れませんでしたが、内包表記によって結果の合計を求めたり、平均を求めることができるので、簡潔に求める方法を身に着けていきましょう。
###【目次リンク】へ戻る