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

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

if 条件式、and/or/not 論理演算子 ― Python言語の文法(応用編)

2019年8月25日

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

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

 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の再掲である。

Python
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文を使ってあらかじめ条件によって変わる値を計算してから、その値を使って式を書かなければならない場合が出てくる)。

Python
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文で表現している。

Python
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のようになる。

Python
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のものが用意されている。

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

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

Python
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論理演算子について説明した。次回は、ラムダ式について紹介する。

  • このエントリーをはてなブックマークに追加

※以下では、本稿の前後を合わせて5回分(第12回~第16回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載目次]を参照してください。

機械学習 & ディープラーニング入門(Python編)[Lesson 14]
12. クラスの定義 ― Python基礎文法入門

Python言語の文法を、コードを書く流れに沿って説明していく連載。前回と今回は、クラスを取り上げている。今回は、そのうちの定義方法について説明する。これでPython言語の基礎文法は完了だ。

2019年8月21日(水)
機械学習 & ディープラーニング入門(Python編)[Lesson 14]
13. 旧バージョン2環境への対応、標準ライブラリ ― Python言語の文法(応用編)

Python言語の文法を、コードを書く流れに沿って説明してきた本連載。今回からは、応用的なトピックを取り上げていく。今回は、Python 3文法で書いたコードをPython 2系環境で実行する方法とPython標準ライブラリについて説明する。

2019年8月24日(土)
機械学習 & ディープラーニング入門(Python編)[Lesson 14]
14. 【現在、表示中】≫ if 条件式、and/or/not 論理演算子 ― Python言語の文法(応用編)

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

2019年8月25日(日)
機械学習 & ディープラーニング入門(Python編)[Lesson 14]
15. ラムダ式 ― Python言語の文法(応用編)

本連載では、コードを書く流れに沿ってPython言語の基礎文法を説明してきた。今回は、応用的だが、利用頻度が高く重要な文法として、ラムダ式を紹介する。

2019年8月26日(月)
機械学習 & ディープラーニング入門(Python編)[Lesson 14]
16. リスト内包表記 ― Python言語の文法(応用編)

本連載では、コードを書く流れに沿ってPython言語の基礎文法を説明してきた。今回は、応用的だが、利用頻度が高く重要な文法として、リスト内包表記を紹介する。

2019年8月28日(水)
Deep Insider の SNS :

本コンテンツの目次

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

if 条件式、and/or/not 論理演算子 ― Python言語の文法(応用編)


本コンテンツに関連する重要用語