Pythonでリストのリスト(ネストされたリスト)から共通要素を抽出する方法
Pythonでは、リストの要素としてさらにリストを持つ「ネストされたリスト」を作成できます。このようなデータ構造を扱う際、複数の内側のリストに共通して存在する要素を抽出したいというニーズが生じることがあります。本記事では、その代表的な2つのアプローチを紹介します。
mapとintersectionを使う方法
積集合(インターセクション)は、異なる集合間の共通要素を求めるための基本的な数学的概念です。Pythonには set.intersection メソッドがあり、2つ以上の集合の共通部分を含むセットを返します。まず map 関数を使って各リストをセットに変換し、その変換結果全体に対して intersection を適用するのがポイントです。
サンプルコード
listA = [['Mon', 3, 'Tue', 7,'Wed',4],['Thu', 5,'Fri',11,'Tue', 7],['Wed', 9, 'Tue', 7,'Wed',6]]
# 元となるリスト
print("Given list of lists : \n",listA)
# 積集合の適用
res = list(set.intersection(*map(set, listA)))
# 結果の出力
print("The common elements among inners lists : ",res)実行結果
上記のコードを実行すると、以下のような出力が得られます。
Given list of lists : [['Mon', 3, 'Tue', 7, 'Wed', 4], ['Thu', 5, 'Fri', 11, 'Tue', 7], ['Wed', 9, 'Tue', 7, 'Wed', 6]] The common elements among inners lists : ['Tue', 7]
reduceとlambdaを使う方法
もうひとつの方法として、Python標準ライブラリの functools.reduce 関数を利用できます。reduce関数は、第1引数として渡された関数を、第2引数のシーケンスの全要素に対して順番に適用していく仕組みです。ここでは lambda 式が、セット化された各ネストリストを順に処理し、共通要素を段階的に絞り込んでいきます。
サンプルコード
from functools import reduce
listA = [['Mon', 3, 'Tue', 7,'Wed',4],['Thu', 5,'Fri',11,'Tue', 7],['Wed', 9, 'Tue', 7,'Wed',6]]
# 元となるリスト
print("Given list of lists : \n",listA)
# reduceの適用
res = list(reduce(lambda i, j: i & j, (set(n) for n in listA)))
# 結果の出力
print("The common elements among inners lists : ",res)実行結果
上記のコードを実行すると、以下のような出力が得られます。
Given list of lists : [['Mon', 3, 'Tue', 7, 'Wed', 4], ['Thu', 5, 'Fri', 11, 'Tue', 7], ['Wed', 9, 'Tue', 7, 'Wed', 6]] The common elements among inners lists : ['Tue', 7]
まとめ
どちらの方法でも同じ結果が得られます。set.intersection(*map(set, listA)) は簡潔で直感的に書ける一方、reduce を使う方法は汎用的な畳み込み処理のパターンとして他の場面にも応用しやすいのが特徴です。なお、これらの手法ではセットが使われるため、重複した要素は自動的に除外され、要素の順序も保証されない点には注意してください。
-
リスト内の要素の合計を求めるPythonプログラム
この記事では、Pythonを使ってリスト内のすべての要素の合計を求める方法について、具体的なコード例とともに解説します。問題の定義リストが入力として与えられたとき、そのリストに含まれるすべての要素の合計値を計算する必要があります。例えば、[1, 2, 3, 4, 5]というリストが与えられた場合、出力は 15(1+2+3+4+5)となります。この問題を解くためのアプローチは主に2つあります。1つは組み込み関数を使用する方法、もう1つはブルートフォース(総当たり)方式でループ処理を行う方法です。方法1:組み込み関数 sum() を使うPythonには標準で用意されている組み込み関数 sum()
-
Pythonリスト入門:作成から操作、削除まで徹底解説
このチュートリアルでは、Pythonのリスト(List)について学びます。リストの作成方法、要素へのアクセス、要素の追加・削除、リスト自体の削除など、基本的な操作を一つずつ丁寧に解説していきます。 Pythonでは、リストは角括弧 [] を使って構築し、各要素はカンマ , で区切って記述します。 Pythonのリストは、異なる型のオブジェクトを混在させて格納できるのが特徴です。すべて文字列である必要も、整数である必要もありません。例えば、以下のように複数の型が混ざったリストを作成できます。mixedTypesList = [a, True, 1, 1.0] リストの作成方法 リストは、角括弧