schedule2019-02-26

配列の重複を削除・抽出する|Python

Pythonで配列の中にある重複する要素の削除と抽出をする。

Python 3.7で確認しています。

重複要素の削除

setは集合型で重複の削除や集合の演算ができます。 list型をset()でset型に変換でき、重複要素の削除も行います。

l = [1, 2, 2, 3, 3, 4]
set(l)
# {1, 2, 3, 4}

list型に戻すとき

l = [1, 2, 2, 3, 3, 4]
list(set(l))
# [1, 2, 3, 4]

重複要素の抽出

重複した要素を取り出すときはsetと内包表記で書けます。

l = [1, 2, 2, 3, 3, 4]
dup = [x for x in set(l) if l.count(x) > 1]
# [2, 3]

内包表記にif 条件をつけると、条件が正のものだけ取り出すフィルタリングができます。 ここを変えて重複数の指定なども可能です。

重複しないユニークな要素の抽出。

unique = [x for x in set(l) if l.count(x) == 1]
# [1, 4]

3つの配列に共通する要素

上を応用して配列に共通する要素を抽出してみます。

l1 = [1, 3, 5]
l2 = [2, 3, 4]
l3 = [1, 2, 3, 5]
l = l1 + l2 + l3

dup = [x for x in set(l) if l.count(x) == 3]
# [3]

集合の場合

set型は&を使うと積集合です。 共通する要素だけ残せます。

ABA \land B

l = set(l1) & set(l2)
# {3}

AB^=A^B^\hat{A \land B} = \hat{A} \lor \hat{B}

l = set(l1) ^ set(l2)
# {3, 4}