

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

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]

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


CC BY-SA 3.0
2017-11-02T05:31:20.690
39240
2017-11-04T06:11:34.383
2017-11-03T07:30:54.563
26029
26029
question
python
Python listからlistの値の抽出


`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]


CC BY-SA 3.0
2017-11-02T08:56:10.817
39252
2017-11-04T06:11:34.383
2017-11-04T06:11:34.383
13199
13199
39240
answer


質問からすると、変数 `b` のリストが `a` のリストの中にあれば`OK`が出ます。  
`print([i for i in b if i in a])`とすれば一致する値だけが出ます。

[code]

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


CC BY-SA 3.0
2017-11-02T09:54:24.253
39254
2017-11-02T10:02:41.180
2017-11-02T10:02:41.180
25766
25766
39240
answer


一致する値を抽出したいとのことですので、集合演算を使うとよいと思います。このプログラムでは変数a, bをそれぞれ集合setへ変換し、  
論理積を求める & 演算子を使って共通する要素である0を抽出しています。

[code]

    a = ['0','1','2','3','4','5','6','7','8','9']
    b = ['0']
    
    set_a = set(a)
    set_b = set(b)
    
    # 論理積 共通のもの抽出
    set_a & set_b
    # >> {'0'}
    
[/code]

理解を深めるために画像に表してみました。  
また、詳しい説明は参考URLを読んでみるとよいと思います。  
[![論理積
width="50%"](https://i.stack.imgur.com/Q7jIh.png)](https://i.stack.imgur.com/Q7jIh.png)

参考URL:  
[Python公式
set](https://docs.python.jp/3.6/library/stdtypes.html?highlight=set#set)  
[Pythonの集合演算 Qiita](https://qiita.com/Tocyuki/items/0bc783daab382ef7a0ec)  
[ベン図 Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%B3%E5%9B%B3)


CC BY-SA 3.0
2017-11-03T13:07:26.217
39273
2017-11-03T13:07:26.217
25868
39240
answer


ご質問の内容が「`b`に含まれる`a`の要素を出す」ということでしたので、そのリストを返すという意味では下記のような'filter'関数を利用する方法もあります。  
（`print('OK')`,`print('NG')`を出すという意味では違うかもしれませんが...）

[code]

    a = ['0','1','2','3','4','5','6','7','8','9']
    b = ['0']
    a_in_b = filter(lambda a_elem: a_elem in b, a)
    print(a_in_b) # output: ['0']
    
[/code]


CC BY-SA 3.0
2017-11-04T05:28:28.373
39282
2017-11-04T05:28:28.373
18996
39240
answer