文法・環境 組み込み関数

【python】リスト(list)の要素の比較【set、一致、共通、差分】

pythonのリスト(list)の要素の比較方法について、サンプルコードを交えながら紹介します。

本記事では、リスト(list)の比較に便利な「set」の基本的な使い方から、

実際にリスト(list)を比較する例まで広く紹介します。

この記事で分かること

  • 要素の比較に便利な「set」の使い方
  • 2つのリストを比較し、一致するか確認
  • 2つのリストを比較し、共通する要素を取得
  • 2つのリストを比較し、共通しない要素(差分)を取得
  • 【おまけ】forループと、in演算子で、リストを比較

スポンサーリンク

要素の比較に便利な「set」の使い方

はじめに、リストの比較をする際に便利な、「set」について紹介します。

set型は、集合を表すデータ型です。

リストと同様に、複数の要素で構成されますが、

リストとは異なり、要素には順番はありません

また、それぞれの要素は重複しない、という特徴もあります。

これらの特徴を活かし、

リストをset型に変換することで、リストの要素を比較できます。

リスト型からset型への変換は、set( )で変換可能です

以下が、リスト型から、set型への変換のサンプルコードです。

### リスト型からset型へ変換するサンプルコード
fruits_1 = ["Apple", "Banana", "Orange", "Banana"]

print(fruits_1)
print(type(fruits_1))
# ['Apple', 'Banana', 'Orange', 'Banana']
# <class 'list'>

set_fruits_1 = set(fruits_1)
print(set_fruits_1)
print(type(set_fruits_1))
# {'Orange', 'Banana', 'Apple'}
# <class 'set'>

set型に変換されると、リストの重複した要素がなくなることが分かると思います。

また、setには順番がないため、リストとは並び順が変わって表示されます。

「set」の基本的な使い方の説明は以上です。

次項から、実際にリストを比較する例を紹介します。

2つのリストを比較し、一致するか確認

2つのリストを比較し、一致するか判定する方法を紹介します。

様々な比較演算子がありますが、

等しいかどうかを判定する 「== 演算子」、「!= 演算子」を使用します。

リストを 「== 演算子」 で比較すると、

リスト内の"要素"と"順番"が一致した場合のみ True を返します。

### リストを「==演算子」で比較したサンプルコード
fruits_1 = ["Apple", "Banana", "Orange"]
fruits_2 = ["Apple", "Banana", "Orange"]
fruits_3 = ["Banana", "Orange", "Apple"]

print(fruits_1 == fruits_2)
# True
print(fruits_1 == fruits_3)
# False

これだと、順番も比較対象になってしまい、"要素"だけを比較することはできないので、

その場合は、先ほど紹介した「set」と組み合わせます。

リストをset型に変換してから比較することで、

順番によらず、要素が共通しているかだけで、比較できるようになります

### リストをset型に変換してから比較するサンプルコード
fruits_1 = ["Apple", "Banana", "Orange"]
fruits_2 = ["Apple", "Banana", "Orange"]
fruits_3 = ["Banana", "Orange", "Apple"]

print(set(fruits_1) == set(fruits_2))
# True
print(set(fruits_1) == set(fruits_3))
# True

2つのリストを比較し、共通する要素を取得

2つのリストを比較し、共通する要素を取得する方法を紹介します。

先ほど紹介した「set」を用いて、リストを集合に変換し、

「& 演算子」で集合のandを取ることで、共通する要素を取得できます。

以下、サンプルコードです。

### 2つのリストを比較し、共通の要素を取得するサンプルコード
fruits_1 = ["Apple", "Banana", "Orange", "Apple", "Lemon"]
fruits_2 = ["Grape", "Apple", "Lemon"]

and_list = set(fruits_1) & set(fruits_2)
print(and_list)
# {'Apple', 'Lemon'}

print(list(and_list))
# ['Apple', 'Lemon']

サンプルコードでは、set型で共通の要素を取得した後に、リスト型に変換し直しています。

set型には順番がありませんので、リスト型へ変換した際の順番は不定になります。

スポンサーリンク

2つのリストを比較し、共通しない要素(差分)を取得

2つのリストを比較し、どちらか一方のリストにしかない要素(差分)を取得する方法を紹介します。

「set」を用いて、リストを集合に変換し、

「^ 演算子」で集合のXOR(排他的論理和)を取ることで、どちらか一方のリストにしかない要素(差分)を取得できます。

以下、サンプルコードです。

### 2つのリストを比較し、共通しない要素(差分)を取得するサンプルコード
fruits_1 = ["Apple", "Banana", "Orange", "Apple", "Lemon"]
fruits_2 = ["Grape", "Apple", "Lemon"]

diff_list = set(fruits_1) ^ set(fruits_2)
print(diff_list)
# {'Banana', 'Orange', 'Grape'}
print(list(diff_list))
# ['Banana', 'Orange', 'Grape']

スポンサーリンク

【おまけ】forループと、in演算子で、リストを比較

forループとin演算子を用いても、リストの要素の比較ができますので、参考までに紹介します。

以下のサンプルコードの場合は、集合に変換しないため、

リスト内で要素が重複していた場合は、重複分についても要素を取得します。

また、前から順に比較するため、

比較後に取得したリストの要素の順番も、もとのリストの要素の順番どおりになります。

### forループとin演算子で、リストを比較し、共通する要素を取得するサンプルコード
fruits_1 = ["Apple", "Banana", "Orange", "Apple", "Lemon"]
fruits_2 = ["Grape", "Apple", "Lemon"]
match_list = []

for elem in fruits_1 :
    #print(elem)
    if elem in fruits_2 :
    match_list.append(elem)
print(match_list)
['Apple', 'Apple', 'Lemon']

スポンサーリンク

まとめ

pythonのリスト(list)の要素の比較方法について、紹介しました。

「set」を用いたリストの比較方法は、知っておくと便利ですので、使えるようにしておきましょう。

スポンサーリンク

スポンサーリンク

-文法・環境, 組み込み関数
-,