静かなる名辞

pythonとプログラミングのこと


【python】複数の条件を総なめするときの簡略化

 たとえば、こういうものを書きたいとする。

def f(a, b):
    if a == "0" and b == "0":
        print("a:0, b:0")
    elif a == "0" and b == "1":
        print("a:0, b:1")
    elif a == "1" and b == "0":
        print("a:1, b:0")
    elif a == "1" and b == "1":
        print("a:1, b:1")

 条件式がいかにも冗長。
 (ifをネストすれば良い、printも冗長、フォーマット文字列使えば良い、あるいは辞書に入れて結果の表示を分岐させれば良いというツッコミは受け付けないことにする。実際には処理内容の分岐が入ることを想定する。)

 こういうときは、シーケンスにして値比較するとスマート。文字列だと最も簡単なのはこれ。

def f(a, b):
    c = a + b
    if c == "00":
        print("a:0, b:0")
    elif c == "01":
        print("a:0, b:1")
    elif c == "10":
        print("a:1, b:0")
    elif c == "11":
        print("a:1, b:1")

 もう少し汎用的な型を想定するなら、listかtupleに入れると良い。

def f(a, b):
    c = [a, b]
    if c == ["0", "0"]:
        print("a:0, b:0")
    elif c == ["0", "1"]:
        print("a:0, b:1")
    elif c == ["1", "0"]:
        print("a:1, b:0")
    elif c == ["1", "1"]:
        print("a:1, b:1")

 コードがシンプルになり、可読性も向上した。