Pythonで配列の差分(どちらか片方にしか無いなど)や重複の除去、和集合・積集合を取得する

Pythonで、配列の比較を行って片方にしか無い要素を取得したいという場合、setにすることでそういった比較が行えるようだったので備忘で残しておく。
以下のように配列を作成して、setにして比較をしてやればいい。なお、set生成時に重複した値は削除される。

a = [1,2,3,5,8,11,1,2]
b = [1,3,5,7,9]
set_a = set(a)
set_b = set(b)
# 重複した値は削除されている
print(set_a)
# 配列「a」にしかない要素を取得
print(set_a - set_b)
# 配列「b」にしかない要素を取得
print(set_b - set_a)
# 和集合(両方の配列の合算)を求める
print(set_a | set_b)
# 積集合(両方の配列に存在している値)を求める
print(set_a & set_b)
Sponsored Links

blacknon@BS-PUB-DEVELOP:~$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = [1,2,3,5,8,11,1,2]
>>> b = [1,3,5,7,9]
>>>
>>> set_a = set(a)
>>> set_b = set(b)
>>>
>>> # 重複した値は削除されている
... print(set_a)
set([1, 2, 3, 5, 8, 11])
>>>
>>> # 配列「a」にしかない要素を取得
... print(set_a - set_b)
set([8, 2, 11])
>>>
>>> # 配列「b」にしかない要素を取得
... print(set_b - set_a)
set([9, 7])
>>>
>>> # 和集合(両方の配列の合算)を求める
... print(set_a | set_b)
set([1, 2, 3, 5, 7, 8, 9, 11])
>>>
>>> # 積集合(両方の配列に存在している値)を求める
... print(set_a & set_b)
set([1, 3, 5])
>>>
blacknon@BS-PUB-DEVELOP:~$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = [1,2,3,5,8,11,1,2]
>>> b = [1,3,5,7,9]
>>>
>>> set_a = set(a)
>>> set_b = set(b)
>>>
>>> # 重複した値は削除されている
... print(set_a)
{1, 2, 3, 5, 8, 11}
>>>
>>> # 配列「a」にしかない要素を取得
... print(set_a - set_b)
{8, 2, 11}
>>>
>>> # 配列「b」にしかない要素を取得
... print(set_b - set_a)
{9, 7}
>>>
>>> # 和集合(両方の配列の合算)を求める
... print(set_a | set_b)
{1, 2, 3, 5, 7, 8, 9, 11}
>>>
>>> # 積集合(両方の配列に存在している値)を求める
... print(set_a & set_b)
{1, 3, 5}

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*