低知能なので if 文で引っかかりました。
サンプル用にこんなリストを用意します。
>>> my_list = [1, 2, 3]
まぁ当然の挙動です。
>>> 1 in my_list True >>> 4 in my_list False
どちらかがリストに含まれていたらOK、みたいな処理が書きたい。
>>> if 1 in my_list or 4 in my_list: ... print('hoge') ... hoge
でも in my_list
が二つもあるので略せないかなと思う訳です。なのでまずは安直に in my_list
を一つ省きます。
>>> if 1 or 4 in my_list: ... print('hoge') ... hoge
お、イケんじゃね?
>>> if 4 or 5 in my_list: ... print('hoge') ... hoge
ダメです。 なぜかというと、
>>> 1 or 4 in my_list 1
こういうことです。「1が真もしくは4が my_list
に含まれる」と解釈され、Python では 0 以外の数字はそれ単体で True
なので先ほどの書き方だと何を書いても真になってしまいます。
自分が意図していない順番で評価されてしまっているならこれでどうだ、という感じでカッコで括ってみます。
>>> if (1 or 4) in my_list: ... print('hoge') ... hoge >>> if (4 or 5) in my_list: ... print('hoge') ...
イケるのでは?
>>> if (4 or 1) in my_list: ... print('hoge') ...
ダメです。
>>> 4 or 5 4 >>> 4 or 1 4
こういうことですね。 ここで書いたやつでは4が既に True
なのでこれがカッコの中が評価された結果となり、この4が my_list
に含まれるか否か、という if 文になってしまっているわけです。
なので多少冗長に見えてもちゃんと書きましょうねというお話でした。 ちなみに後半のカッコで括ったバージョンはまだボツになった版のブランチにしっかり会社の GitHub のリポジトリにプッシュしたままであることを書きながら思い出しました。 他の箇所の処理で既にボツなのでお蔵入り確定なのですが恥ずかしいので明日朝一で直しておこう…