2016-03-25 18 views
2

パターンがリストのすべての文字列と一致する場合、Trueを返す関数を定義しようとしています。同様に、matchAll(pattern、list)。Pythonでブール値の集合を集め、すべてを 'AND'と組み合わせた最終テストを返すにはどうすればいいですか?

import re 

def matchAll(pattern, list): 
    list_truth = list 
    for i in list: 
     list_truth[i] = re.search(pattern,i) != none 
    if False in list_truth: 
     return False 
    else: 
     return True 

しかし、それは動作しません:

私の最初の試みです。私が間違っていた部分を教えてください。本当にありがとう!私も自分のコードを変更した

print matchAll('a', ['a', 'ab', 'abc']) # True 
print matchAll('a', ['a', 'ab', 'bc']) # False 
print matchAll('(ab)?', ['a', 'ab', 'abc']) # True 
print matchAll('.', ['a', 'ab', 'abc'])  # True 
print matchAll('.{2,3}', ['a', 'ab', 'abc']) # False 

として:

import re 
def matchAll(pattern, list1): 
list_truth = list 
for i in list1: 
    if re.search(pattern,i) != None: 
     pass 
    else: 
     return False 
return True 

はまだ、それが正しい結果を返しますが、私は考えていないよう

例えば、サンプル入力/出力が見えますそれは関数を構築する良い方法です。どのように私はそれを最適化することができますか?ありがとう!あなたはこのためall(Pythonの組み込み)

def match_all(pattern, items) 
    return all(re.search(pattern, item) for item in items) 

を使用することができます

+0

はあなたのコードですか?また、サンプルの入力を表示することができます – idjaw

+0

私はあなたが言語のコンストラクタをシャドウしているので、あなたがパラメータ名として "リスト"を使用する場合、問題があると思う。 "list"を予約語ではない別の名前に置き換えてください。 –

+1

for i in listはリストの値(つまり文字列)を繰り返し処理し、それをインデックスとして使用するため、問題になります。 – bereal

答えて

3

はまた

  • listは組み込み型であることに注意してください、あなたの変数名
  • 戻り値のためにそれを使用しないようre.searchはオブジェクト(truey)またはNone(falsy)のいずれかであるため、戻り値はall
  • のブール値として使用できます
  • キャメルケースは、多くの場合、あなたはall()機能を探している
+0

私も同じように投稿しようとしていました! :) +1 – idjaw

+0

ジェネレータの表現を取り入れることを念頭に置いて、もう1人が 'all'と' any'を使い始める必要があります。 'all([x in x in y]) '。 – Bahrom

+0

合意したジェネレータの表現は爆弾です:) – akaIDIOT

3

Pythonでsnake_case(不吉なPEP-8の議論)に置き換えられます。ここに行く:

import re 

def matchAll(pattern, list_): 
    return all(re.search(pattern,i) for i in list_) 
+0

ハ、それに私を打つ、それはそうです:P – akaIDIOT

+0

@akaIDIOT私はあなたがそれに私を打つと信じています。ああ、あなたの好意に勝てる可能性があります:P – Bharel

+0

ああ!私はこの正確な答えを投稿するためにここに来ていた! :) +1 – idjaw

関連する問題