Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Pythonプログラミング入門

Pythonのリストの中でorを使うとどうなるか?【Python入門解説】

Pythonのリストの中でブール演算子orを使う方法の解説

今回はPythonリストのちょっと変わった?使い方をご紹介します。以前どこかで見たリストの使い方です(どこで見たのかは忘れましたが)。

それは、リストの中にブール演算子orを使ったものです。次の形です。

[A or B or C or D,,,,,]

これを考えるにあたって、まずはPythonのブール演算子orについての基本を確認しておきましょう。

Pythonのブール演算子orについて

まず、Pythonにおけるブール演算子orについて、基本を確認しておきましょう。

A or B

この場合の動きは、

Aが真っ先に評価される
↓
・Aが真ならばAの値が返る(Trueがいつも返るわけではない)
・Aば真でないならばBが次に評価される
↓
Bが真ならばBの値が返る(Trueがいつも返るわけではない)
↓
そうでないならばFalseが返る

となります。

具体例をいくつか見ておきましょう。

# Example 1
1 or 2  # 1が返る(Trueではない)
1<2 or 3>4  # Trueが返る
1>2 or 3>4  # Falseが返る

# Example 2
s="Tom"
s or "Mary"  # "Tom"が返る

# Example 3
default_name = "Mary"
t = ""  # 空の文字列tについては、bool(t)の結果はFalse
set_name= t or default_name  
print(set_name)  # "Mary"

最後のExample 3の場合は、

set_name= t or default_name  

この部分でtが空の文字列であるため真ではないと評価され(実際にbool(t)はFalse)、次にdeault_nameが評価されます。その結果、その値である文字列Maryが返されます。それがset_nameへ代入されます。

それでは今回の記事の本題であるリストの中にブール演算子を使うコードを見てみましょう。

リストの中にブール演算子を使うと?

#比較演算をブール演算子orを使ってつなげてリストにして、その結果を返す関数
def fnc(left_arg, right_arg):
    result = [
        left_arg[0]<right_arg[0]  # 1<2なので正しい
        or 
        left_arg[1]>right_arg[1]  # 2>3なので間違い
        or 
        left_arg[2]>right_arg[2]  # 3>4なので間違い
    ]
    return result

#比較演算の左辺と右辺をそれぞれ作る    
left_arg, right_arg = [1,2,3], [2,3,4]

#関数実行
fnc(left_arg, right_arg)

結果は、

[True]

単なるTrueではなく、リストとしての[True]であることに注意してください。

実際に、

type([x<0 or y<2 or z>3])

とすると、

<class 'list'>

となります。

これが一体どういう点で便利なのか、どういった場面で使うといいのか、といわれると正直「うーん・・・?」となるのですが、まぁこういう書き方もできるということです(笑)。