検索
連載

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

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

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「機械学習&ディープラーニング入門(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文と論理演算子で記述したコード例

 どちらかというとこちらの方が、変数cond_num100(第1条件)、かつ(and)、変数cond_str(第2条件)*5のときが「OK」で、それ以外は「NG」という条件を、そのままコードに表現できているのが分かる。

*5 論理演算子は、第1条件が評価されて「真」であった場合のみ、第2条件が評価される仕組みになっている。よって、第2条件以降が必ずしも実行されないかもしれないことに留意してコードを書く必要がある。


 論理演算子はandだけではなく、表4のものが用意されている。

論理演算子 記述例 意味
and a and b aが真 かつ bが真 (両方が真)
or a or b aが真 もしくは bが真 (いずれかが真)
not not a aが偽 (aが真ではないとき)
表4 条件で使える論理演算子

 論理演算子のorandと同じ使い方である。notはちょっと違うので、コード例をリスト19-3に示しておこう。

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

answer  # 'NG'と出力される

リスト19-3 論理演算子notで否定条件を記述したコード例

 変数cond_num100ではない、もしくは(or)、変数cond_strではないときは「NG」で、それ以外は「OK」という意味の条件を記述している。高校数学で学ぶ「論理」(命題・条件・集合)と同じような内容でややこしいが、プログラミング時はこういうロジック(論理)を考える部分が少なからずある。

つづく

 今回は、if条件式とand/or/not論理演算子について説明した。次回は、ラムダ式について紹介する。

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

機械学習&ディープラーニング入門(Python編)

Copyright© Digital Advantage Corp. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る