EaseUSクラウドサービスが大公開

リスト同士を比較して、それぞれ片方にしか入っていない要素を取り出して、リストを作りたいです。

…という方に向けて、その方法をまとめました。

 

ということでこんにちは、20代怠け者(@20sInvest)です!

この記事では、2つのリスト・配列変数を比較して、それぞれ片方にしか入っていない要素を取り出してリスト化する方法をまとめました。

具体的には、以下のような感じですね。

ListA = [1,2,3,4,5,6,7,8,9,10]

ListB = [1,3,5,7,9,11]

#AにあってBにない要素は、[2, 4, 6, 8, 10, 11]

 

こうした比較は「対称差集合」と呼ばれます。

AとB、両方に含まれているのが条件だとして、その条件を満たしていないものを探す…

といった方法に使えますね。

コピペでOKな形で、スクリプトをまとめました。

早速いきましょう。

 

【ソース】リストを比較して、それぞれ片方にしか入っていない要素を取り出す方法

ということで、ソースはこちらの通り。

ListA = [1,2,3,4,5,6,7,8,9,10]

ListB = [1,3,5,7,9,11]

listC = set(ListA) ^ set(ListB)
listC = list(listC)

 

上記を実行すると、以下のようなリストが生成されます。

いずれも、それぞれ片方のリストにしか入っていない要素ですね。

[2, 4, 6, 8, 10, 11]

【解説】このスクリプトでやっていること

さて、このスクリプトでは対称差集合を使って、「AとBそれぞれ片方にしか入っていないもの」を取り出しています。

まずset()を使って、List型を一旦Set型に変換します。

そして、Set型同士を演算子「^」で比較することで、対称差集合となる要素を探すことができます。

その結果を、ListCに入れるという処理が、こちらです。

listC = set(ListA) - set(ListB)

 

ListCという変数が返ってきますが、この状態ではSet型で返ってきます。

その後、別の処理で使う場合はList型にしておいた方がなにかと便利なので、list()を使って再度List型に戻しているのが2行目の処理です。

カンタンですね!

listC = list(listC)

まとめ

処理の流れがわかりやすいように、処理を2行にまとめましたが、以下のように1行にまとめてしまっても全然OKです。

listC = list(set(ListA) ^ set(ListB))

 

以上、一方のリストにあってもう片方のリストに無い要素だけを取り出す方法でした。

ぜひ、コピペで活用してみてください。

 

このように、コピペでそのまま使えるPythonスクリプトなど、Tipstourでは他にも色々な情報をシェアしています。

興味があれば、ぜひ他の記事もチェックしてみてください。

Python関連記事一覧