Address
304 North Cardinal St.
Dorchester Center, MA 02124

Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM

Pythonで複数のリストから共通要素を取り出すコード例とその解説

Pythonで複数のリストに共通する要素を取得する方法の解説とコード例

Pythonで複数のリストから、その共通要素を取得するコード例と解説。再帰関数を使っての方法を説明。

今回はPythonで複数のリストの中から共通する要素だけを取得する方法を解説します。今回の作ったコードは再帰関数を使ったものとなりますので、完全なPython初心者には少し難しいと思います。

しかし再帰関数が使えると、Pythonの理解も深まりますし、コードをより簡潔に書けるようにもなります。最初は難しいですが、ぜひ再帰関数を使った処理にも慣れていただけると幸いです。

前提知識:Pythonの再帰関数の使い方とその説明

Pythonにおける再帰関数については以下の記事で説明しましたので、ぜひ最初に読んでいただければと思います。

コード例

今回のコードは次のようになります。

テキトーな文字列から5つのリストを作り、その全てに共通する要素(今回はアルファベットのaです)を取得するコードです。

今回のコード例をブログへの埋め込む方法として、githubのgistという機能を使ってみました。

このように行数も自動的に表示されるのでわかりやすいかな?と。

そして今回のコードでは、リストをいくつも後から増やすことができます。このコードでは最初に5個つくっていますが、少しだけコードをいじれば、リストが100個でも200個でも対応できます。

たとえば、リストを最初に6個つくったときは、

get_commons(list_one, list_two, list_three, list_four, list_five)  

この部分の引数を6つにしましょう。

今回は作りませんでしたが、このコードをもうちょっと改変すれば、リストが100でも200でも対応しやすい、もう少し自由度のあるコードになると思います。

解説

全体の構造

上のコードはややこしく見えるかもしれませんが、全体を単純化すると次のような構造になっています。

1:リストを5個作る

2:共通要素を得る関数(get_commons)を定義
   2-1:初期設定
   2-2:再帰関数(recursive_fnc)の定義
   2-3:recursive_fncの実行

3:関数get_commonsを実行

考え方

1:5番目のリストと4番目のリストの共通要素を取得する。そのために、set()関数をつかって、set型オブジェクトを作成、さらに、set型オブジェクトが持つintersection()メソッドを使う
↓
2:結果をinitial_commonsに代入
↓
3:initial_commonsと3番目のリストの共通要素を取得。それをcommonsに代入。
(この時点でcommonsは、5番目、4番目、3番目という3つのリストに共通要素になる)
↓
4:commonsと2番目のリストとの共通要素を取得し、commonsに代入
↓
5:commonsと1番目のリストとの共通要素を取得し、commonsに代入。これでcommonsはすべてのリストに共通要素となる
↓
6:「0番目のリスト」になったら、commonsの最終結果を表示して再帰処理を終了

このうち、上3~6の部分が再帰関数によって処理されています。再帰関数のイメージは、

  • 同じ処理を繰り返す
  • その前の処理の結果を利用する

という2つの性質を持ちながら、次々と値を変化させていく。そんな感じでしょうか。

9行目:def get_commons(*list_of_lists)について

この部分ですが、引数にはアスタリスク「*」がついたlist_of_liostsという変数名になっています。

このように関数の引数にアスタリスクをつけると、

  • 複数の引数(5個のリスト)を1つリストにまとめて、それをlist_of_listsというリストに代入
  • アスタリスクによって、そのlist_of_listsを展開

という2つの処理がなされることになります。

このあたりは、過去記事「Pythonの引数*args, **kwargsとは?その解説」で解説しましたので、読んで見てください。

15行目~22行目:再帰関数

この部分が再帰関数の部分となっています。ポイントは、再帰関数recursive_fncを定義しているdefブロックの中で、return文によって自分自身(つまりrecursive_fnc)を呼び出している点です。

再帰関数については上述のように、こちらの過去記事で解説しています。

Pythonをプロから短期間で合理的にマスターするなら、やはり動画による学習方法がわかりやすくオススメです。世界最大級のオンライン学習サイトUdemy(ユーデミー)【PR】ではPythonのプログラミング講座が入門~応用レベルまで幅広く展開されています。

Udemyの動画講座では講師に質問が可能、動画なのでプログラムの動きがわかりやすく理解しやすい、わかりにくいところを何度も繰り返し再生できる、プログラミングスクールよりもはるかに安いというメリットがあります。

その中でも次のような講座がおすすめです。

他にも多数のプログラミング講座があるのでぜひ活用し、合理的に短期間でプログラミングを身に着けましょう。

愛を分かち合いましょう