Python
python3

PythonのListに含まれる全ての要素がもう一つのListに含まれるかの検証方法

はじめに

list1 = [0, 1, 2]
list2 = [4, 2, 5, 6, 12, 1, 9, 0]

上記のようにlist1の要素全てがlist2に含まれるかを検証して真偽値を返す必要があったのでやってみます。

方法1

最初に以下のような関数を思いつきました。

def list_check1(list1, list2):
    count = 0
    for element in list1:
        if element in list2:
            count += 1
        if len(list1) == count:
            return True
    return False

これでいいのですが、list1の要素数が増えるとすごく遅くなってしまいます。

list_check1.py
import time

def list_check1(list1, list2):
    count = 0
    for element in list1:
        if element in list2:
            count += 1
        if len(list1) == count:
            return True
    return False

start = time.time()
list1 = [i for i in range(10000)]
list2 = [i for i in range(100000)]
print(list_check1(list1, list2))
print(time.time()-start)
$ python list_check1.py
True
0.7270619869232178

方法2

Setオブジェクトにはsetの全ての要素がotherに含まれるか判定するissubset(other)メソッドがあるので、一度ListをSetに変換して判定してみます。

list_check2.py
import time

def list_check2(list1, list2):
    return set(list1).issubset(list2)

start = time.time()
list1 = [i for i in range(10000)]
list2 = [i for i in range(100000)]
print(list_check2(list1, list2))
print(time.time()-start)
$ python list_check2.py
True
0.012912750244140625

list_check1と比べてかなり速くなりました。