2016-12-08 11 views
0

のは、我々はリストやタプルである参照配列としましょう:Pythonのリスト要素シーケンスの会員

reference = ['a', 'b', 'c', 'd'] 

を、私はいくつかのシーケンスは、参照配列内に存在しないかどうかを確認したい:

target1 = ['a', 'b', 'c'] # true 
target2 = ['a', 'c', 'b'] # false 
target3 = ['a', 'c', 'd'] # false 
target4 = ['c', 'd', 'e'] # false 
target5 = ['c', 'd']  # true 

この種の配列メンバーシップをチェックする組み込み関数はありますか? ありがとうございました!

+1

なぜ[['a'、 'c'、 'b'] 'は' false'ですか?秩序は関係するのだろうか? – RomanPerekhrest

+0

組み込み関数が存在するかどうか、または誰かがこれを行う関数を提供できるかどうかという疑問はありますか? –

+0

@RomanPerekhrestはい、注文は重要です。 – user2870222

答えて

1

は、私は、関連するモジュールdifflib.SequenceMatcherを見つけました。

def sequence_membership(target, reference): 
    get_eq = lambda x: [c for c in x if c[0]=='equal'] 
    get_length = lambda x: x[2]-x[1] 
    s = SequenceMatcher(None, target, reference) 
    match_result = s.get_opcodes() 
    overlapped = get_eq(match_result) 
    if len(overlapped) ==1 and get_length(overlapped[0]) == len(target): 
     return True 
    else: return False 

>>> sequence_membership(target1,reference) 
True 
>>> sequence_membership(target2,reference) 
False 
>>> sequence_membership(target3,reference) 
False 
>>> sequence_membership(target4,reference) 
False 
>>> sequence_membership(target5,reference) 
True 
0

リストまたはタプルをstringに変換して、部分文字列が参照に存在するかどうかを調べることができます。私の考えを説明するための簡単なコードスニペット:

reference = ['a', 'b', 'c', 'd'] 
target1 = ['a', 'b', 'c'] # true 

list2str = lambda ref: "".join(ref) 

base = list2str(reference) 
t1 = list2str(target1) 

if t1 in base: 
    print 'found' 
else: 
    print 'unfound' 
+1

とリストが '['a'、 'bc'、 'd']'とターゲット '['b'、 'c '] ' – Poloq

+0

@Poloq、いいキャッチ。次に、リスト内の各単語を区別するために区切り記号を使用する必要があります。 – ichbinblau

+0

@ichbinblauあなたの答えに感謝します。私は要素のスペルがPoloqが指摘したのと同じような問題を引き起こすかもしれないので、リストを文字列に変換するのではなく、リストを保持したい。例えば。 'ref = ['a'、 'bra'、 'cad'、 'abra']'、 'target = ['abra'、 'cad']#false' – user2870222