連載
» 2019年08月25日 05時00分 公開

機械学習&ディープラーニング入門(Python編):Lesson 14 if 条件式、and/or/not 論理演算子 ― Python言語の文法(応用編)

本連載では、コードを書く流れに沿ってPython言語の基礎文法を説明してきた。今回は、応用的だが、利用頻度が高く重要な文法として、if条件式とand/or/not論理演算子を紹介する。

[一色政彦,デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「機械学習&ディープラーニング入門(Python編)」のインデックス

連載目次

ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

 Python言語の文法のうち、応用的だが押さえておいてほしいものをいくつか、具体的には、

  • if 条件式(Lesson 14)
  • and/or/not 論理演算子(Lesson 14)
  • ラムダ式(Lesson 15)
  • リスト内包表記(Lesson 16)
  • 例外(Lesson 17)

の5項目を紹介してから終わりとしたい。これらは、Pythonのサンプルコードを読む際に出くわす可能性が特に高く、しかも知らないと非常に難解そうなコードに思えてしまうものである。そのうち今回は、「if 条件式」と「and/or/not 論理演算子」について説明する。脚注や図、コードリストの番号は前回からの続き番号としている。

 なお、本稿で示すサンプルコードの実行環境については、Lesson 1を一読してほしい。

 Lesson 1でも示したように、本連載のすべてのサンプルコードは、下記のリンク先で実行もしくは参照できる。


Google Colabで実行する
GitHubでソースコードを見る

Python言語の文法(応用編)

if条件式

 まずは簡単なものから。Lesson 9では、制御フロー文の一つとしてif文を説明した。これで条件分岐は実現できるわけだが、「1つの文の中でも(式によって)条件分岐することで、コードを短くしたい」というニーズがある。

 例を挙げよう。リスト18-1は、前回のLesson 9のリスト12-1の再掲である。

predicted_label = '猫'
true_label = '犬'
# 上の2行は下記コードの実行に必要な仮のコード

if predicted_label == true_label:
  color = 'blue'
else:
  color = 'red'

color  # 'red'と出力される

リスト18-1 条件分岐を行う「文」のコード例

 if文〜else文は配下のブロックを含めて4行となっている。このような書き方はPython言語では(推奨されており)普通であるが、特にC言語派の人にとっては冗長な書き方に感じられることがある。そう考える人のために、「if文」ではなく「if式」という文法も用意されている。これを使って、同様のコードを書くとリスト18-2のようになる。if文はもちろん「文」であり、式の中にif文を組み込んで表記することはできないが、if式は「式」なので、通常の計算式の中で条件分岐が必要なときにもそこに含められる(if式がないと、if文を使ってあらかじめ条件によって変わる値を計算してから、その値を使って式を書かなければならない場合が出てくる)。

color = 'blue' if predicted_label == true_label else 'red'

color  # 'red'と出力される

リスト18-2 条件分岐を行う「式」のコード例

 この一文は、図18のような構文になっている。注意点としては、ifキーワードの前に「真の場合の値」を記述する必要があることだ。この構文は、Python言語では条件式と呼ばれており、C言語系の三項演算子に相当するものである。

条件式の構文 図18 条件式の構文

 ちなみに、条件部分には、if文同様に、比較演算子を使用できる。

and/or/not論理演算子

 せっかくなので、もう少し「条件」について説明しておこう。

 本連載では、非常にシンプルな条件指定の例しか見ていない。例えば、複数の条件を指定するにはどうすればよいだろうか。リスト19-1はその例で、変数cond_num100、かつ、変数cond_strのときが「OK」で、それ以外は「NG」という条件を、2つのif文で表現している。

cond_num = 98
cond_str = '猫'
# 上の2行は下記コードの実行に必要な仮のコード

if cond_num == 100:
  if cond_str == '犬':
    answer = 'OK'
  else:
    answer = 'NG'
else:
    answer = 'NG'

answer  # 'NG'と出力される

リスト19-1 複数の条件指定を複数のif文で記述したコード例

 確かにこれは間違いではないが、書き方としては冗長である。論理演算子ブール演算子)を使えば、複数の条件をまとめて記述できる。先ほどの説明で「A条件かつB条件」という書き方をした。この「かつ」に対応する論理演算子がandである。andを使って書くと、リスト19-2のようになる。

if cond_num == 100 and cond_str == '犬':
  answer = 'OK'
else:
  answer = 'NG'

answer  # 'NG'と出力される

リスト19-2 複数の条件指定を1つのif文と論理演算子で記述したコード例

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。