web-dev-qa-db-ja.com

別の文字列に複数の文字列が存在するかどうかを確認してください

配列内の文字列が別の文字列に存在するかどうかを確認する方法はありますか。

好きです:

a = ['a', 'b', 'c']
str = "a123"
if a in str:
  print "some of the strings found in str"
else:
  print "no strings found in str"

そのコードはうまくいきません、それは私が達成したいことを示すためだけのものです。

301
jahmax

any を使用できます。

if any(x in str for x in a):

リストからすべての文字列が見つかったかどうかを調べるのと同様に、 allany

580
Mark Byers

any()は、TrueまたはFalseだけが必要な場合ははるかに優れたアプローチですが、どの文字列がどの文字列に一致するかを具体的に知りたい場合は、2つの方法があります。

最初の一致が欲しい場合(デフォルトはFalse):

match = next((x for x in a if x in str), False)

あなたがすべての一致(重複を含む)を取得したい場合:

matches = [x for x in a if x in str]

すべての重複しないマッチを取得したい場合(順番を無視して):

matches = {x for x in a if x in str}

すべての重複しないマッチを正しい順序で取得したい場合は、次のようにします。

matches = []
for x in a:
    if x in str and x not in matches:
        matches.append(x)
51
zondo

aまたはstrの文字列が長くなる場合は注意が必要です。簡単な解決策はO(S *(A ^ 2))を取ります。ここで、Sstrの長さで、Aはa内のすべての文字列の長さの合計です。より速い解決策として、線形時間O(S + A)で実行される文字列照合のための Aho-Corasick アルゴリズムを見てください。

39
jbernadas

regexを使用して多様性を追加するだけです。

import re

if any(re.findall(r'a|b|c', str, re.IGNORECASE)):
    print 'possible matches thanks to regex'
else:
    print 'no matches'

またはあなたのリストが長すぎる場合 - any(re.findall(r'|'.join(a), str, re.IGNORECASE))

16
jetpackdata.com

あなたはaの要素を繰り返す必要があります。

a = ['a', 'b', 'c']
str = "a123"
found_a_string = False
for item in a:    
    if item in str:
        found_a_string = True

if found_a_string:
    print "found a match"
else:
    print "no match found"
8
Seamus Campbell
a = ['a', 'b', 'c']
str =  "a123"

a_match = [True for match in a if match in str]

if True in a_match:
  print "some of the strings found in str"
else:
  print "no strings found in str"
3
mluebke

jbernadasは、複雑さを減らすために、 Aho-Corasick-Algorithm について既に述べました。

これをPythonで使用する1つの方法があります。

  1. ここから からaho_corasick.pyをダウンロードしてください

  2. メインのPythonファイルと同じディレクトリに置き、aho_corasick.pyという名前を付けます。

  3. 次のコードを使用して、アルゴリズムを試してください。

    from aho_corasick import aho_corasick #(string, keywords)
    
    print(aho_corasick(string, ["keyword1", "keyword2"]))
    

検索では大文字と小文字が区別されますことに注意してください

2
Domi W

コンテキストに依存します(単一の単語a、e、wなど)のような単一のリテラルをチェックするかどうかは、inで十分です。

original_Word ="hackerearcth"
for 'h' in original_Word:
      print("YES")

あなたがoriginal_Wordの中の文字のどれかをチェックしたいならば:を利用する

if any(your_required in yourinput for your_required in original_Word ):

そのoriginal_Wordに必要なすべての入力が必要な場合は、all simpleを使用します。

original_Word = ['h', 'a', 'c', 'k', 'e', 'r', 'e', 'a', 'r', 't', 'h']
yourinput = str(input()).lower()
if all(requested_Word in yourinput for requested_Word in original_Word):
    print("yes")
1
Trinadh Koya

私はスピードのためにこの種の関数を使うでしょう:

def check_string(string, substring_list):
    for substring in substring_list:
        if substring in string:
            return True
    return False
0
Ivan Mikhailov
data = "firstName and favoriteFood"
mandatory_fields = ['firstName', 'lastName', 'age']


# for each
for field in mandatory_fields:
    if field not in data:
        print("Error, missing req field {0}".format(field));

# still fine, multiple if statements
if ('firstName' not in data or 
    'lastName' not in data or
    'age' not in data):
    print("Error, missing a req field");

# not very readable, list comprehension
missing_fields = [x for x in mandatory_fields if x not in data]
if (len(missing_fields)>0):
    print("Error, missing fields {0}".format(", ".join(missing_fields)));
0
Robert I
flog = open('test.txt', 'r')
flogLines = flog.readlines()
strlist = ['SUCCESS', 'Done','SUCCESSFUL']
res = False
for line in flogLines:
     for fstr in strlist:
         if line.find(fstr) != -1:
            print('found') 
            res = True


if res:
    print('res true')
else: 
    print('res false')

output example image

0
LeftSpace

Stringですべてのリスト要素を利用可能にする方法に関するもう少し情報があります

a = ['a', 'b', 'c']
str = "a123" 
list(filter(lambda x:  x in str, a))
0
Nilesh Birari

驚くほど速いアプローチはsetを使うことです:

a = ['a', 'b', 'c']
str = "a123"
if set(a) & set(str):
    print("some of the strings found in str")
else:
    print("no strings found in str")

これは、aに複数文字の値が含まれていない場合に機能します(その場合は、 above のようにanyを使用します)。もしそうなら、aを文字列として指定するほうが簡単です:a = 'abc'

0
Berislav Lopac