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」を用いたリストの比較方法は、知っておくと便利ですので、使えるようにしておきましょう。
スポンサーリンク