Python listからlistの値の抽出


初心者のため、ご教授お願いいたします。

aのlistから、bのlistと一致する値を抽出したいです。

[code]

    a = ['0','1','2','3','4','5','6','7','8','9']
    b = ['0']
    if b in a:
        print ("OK")
    else:
        print ("NG")
    
[/code]

この結果

[code]

    NG
    
[/code]

と  
表示されてしまいます。




`b`の要素が`a`にも **必ず** 含まれているか知りたいということであれば、`a`と`b`を集合に変換して、前者が後者を部分集合として含むか調べます。

[code]

    a = ['0','1','2','3','4','5','6','7','8','9']
    b = ['0']
    if set(b) <= set(a):
        print ("OK")
    else:
        print ("NG")
    
[/code]

もし重複する要素がある場合は、この方法は使えません。代わりに`Counter`などを使って要素を数え上げる方法が考えられます。

[code]

    from collections import Counter
    
    a = ['0','1','2','4','5','6','7','8','9']
    b = ['0']
    
    counter_a = Counter(a)
    counter_b = Counter(b)
    
    # `b`の各要素について、その要素が`a`に含まれているか、および`a`に含まれる個数は`b`に含まれる個数より多いか
    if all(map(lambda k: k in counter_a and counter_a[k] >= counter_b[k], counter_b)):
        print('OK')
    else:
        print('NG')
    
[/code]

