1

次のように、部分文字列のリストを文字列のリストに一致させる良いpythonicの方法は何ですか:

if 'sub1' in str1 or 'sub2' in str1 or ... 'subN' in str1 or\
   'sub1' in str2 or 'sub2' in str2 or ... 'subN' in str2 or\
   ...
   'sub1' in strM or 'sub2' in strM or ... 'subN' in strM:

1 つの方法は、次のように、それらをリスト内包表記で結合することです。

strList = [str1, str2, ..., strM]
subList = ['sub1', ..., 'subN']
if any(sub in str for sub in subList for str in strList):

おそらくライブラリ関数のように、ディメンションの 1 つを吸収するのに適したものはありますか?

どうもありがとうございました。

4

2 に答える 2

4

部分文字列を正規表現にコンパイルし、それを使用して各文字列を検索できます。RE が内部制限を超えるほど多くの部分文字列がない場合、これがおそらく最も効率的な方法です。

pattern = "|".join(re.escape(s) for s in subList)
crexp = re.compile(pattern)
if any(crexp.search(s) for s in strList):
    ...
于 2013-06-21T12:22:54.310 に答える
3

この回答で説明されているように、正規表現は、すべての部分文字列を同時にチェックできる DFA としてモデル化されているため、適切な方法です。非常に詳細であるため、おそらくその回答を読む必要があります。

于 2013-06-21T12:21:14.850 に答える