Python でリストを比較する。

1. == 比較演算子

値が同じなら True

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> c = [1, 3, 2]
>>> a == b
True
>>>
>>> # 順番が違っていていると False
>>> a == c
False

2. is 比較演算子

同じオブジェクトなら True

>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> c = a
>>>
>>> # 変数 a と 変数 b には別のオブジェクトが代入されている。
>>> a is b
False
>>> a.pop()
3
>>> a
[1, 2]
>>> b
[1, 2, 3]
>>>
>>> # 変数 a と 変数 c には同じオブジェクトが代入されている。
>>> a is c
True
>>>

Python の代入について
Python の is と == の違い

3. set にキャストする。

順番が異なっていても True を返してくれる。

>>> a = [1, 2, 3]
>>> b = [1, 3, 2]
>>>
>>> # 順番が異なっていても True
>>> set(a) == set(b)
True
>>>

請注意: ただし、重複している要素があるリストには使えない。

単純に set にいれて比較してしまうのが簡単だけど、
Python に限らず、一般に集合は重複を許さないため

複数の要素があった場合に正しく判定できない。
ちなみに重複を許す集合は、多重集合と言ったりする。

>>> # 引き算 1, 2 が欲しい。
>>> set([1, 2, 2, 4]) - set([2, 3, 4])
{1}
>>>
>>> # 共通する要素を取り出す 1, 1 が欲しい
>>> set([1, 3, 1]) & set([1, 1, 2])
{1}
>>>
>>> # 比較 False になって欲しい。
>>> set([1, 1, 2, 3]) == set([1, 2, 3])
True
>>>

4. 一つ一つ地道に比較する。

なので、重複を許すようなリストを比較する場合は、
次のように一つ一つ比較する他なさそう。

>>> # 差(リストの要素の引き算)
>>> subtract_list([1, 2, 2, 4], [2, 3, 4]))
[1, 2]
>>>
>>> # 積(共通の要素を抜き出す)
>>> intersect_list([1, 3, 1], [1, 1, 2]))
[1, 1]
>>>
>>> # 等号(等しいかどうか)
>>> equal_list([1, 1, 2, 3], [1, 2, 3]))
False
>>>
"""Compare elements in two list."""
def subtract_list(lst1, lst2):
    lst1 = lst1.copy()
    for element in lst2:
        try:
            lst1.remove(element)
        except ValueError:
            continue
    return lst1


def intersect_list(lst1, lst2):
    lst = []
    lst1 = lst1.copy()
    for element in lst2:
        try:
            lst1.remove(element)
        except ValueError:
            continue
        else:
            lst.append(element)
    return lst


def equal_list(lst1, lst2):
    lst1 = lst1.copy()
    for element in lst2:
        try:
            lst1.remove(element)
        except ValueError:
            return False
    if lst1:
        return False
    return True