1. ホーム
  2. python

Pythonは「もしxがa|b|c|dを含むなら...」を表現する、よりきれいな方法を持っていますか?[重複しています]。

2023-10-04 17:09:09

質問

Pythonicな方法で、文字列が x の部分文字列であるかどうかを調べる方法です。 y

if x in y:

もし x と等価かどうかを調べる a , b , c , d , e , f または g もPythonicです。

if x in [a,b,c,d,e,f,g]:

しかし、ある文字列 x のどちらかが含まれているかどうかを調べます。 a , b , c , d , e , f または g は不格好に見えます。

if a in x or b in x or c in x or d in x or e in x or f in x or g in x

もっと ピトニック という文字列があるかどうかを確認する方法はありますか? x がリストの要素を含んでいるかどうかをチェックする方法?

ループを使ったり正規表現を使ったりして自分で書くのは簡単なことだと思うのですが。

re.search('(dog|cat|bird|mouse|elephant|pig|cow)', x)

というのがありますが、正規表現を使わないでもっとすっきりした方法はないかと考えていました。

どのように解決するのですか?

Pythonicなアプローチとしては any() :

if any(s in x for s in (a,b,c,d,e,f,g)):

リンク先のドキュメントより。

any ( 反復可能 )

のいずれかの要素があれば、Trueを返します。 イテラブル のいずれかの要素が真であれば真を返す。iterableが空の場合はFalseを返す。と等価である。

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

また、ここではリストの代わりにタプルを使っていることに注意してください。もし、あなたの a - g の値があらかじめ定義されている場合は、確かにタプルが好ましいでしょう。参照してください。 Pythonではタプルはリストより効率的ですか?