質問: 当方最近Pythonを触り始めたばかりのプログラム初心者です。 以下のようなリストと ``` ['りんご','ばなな','みかん'] ``` 下記のようなリストを比較し、 一番マッチングしたものを返してあげる関数を作成したいのですが、 どのようなにすればよいのでしょうか? ``` {['いし','やま','りんご','かわ','にんじん'] ['いし','やま','りんご','かわ','にんじん'] ['いし','やま','りんご','ばなな','にんじん'] ['いし','やま','めろん','かわ','にんじん'] ['いし','やま','りんご','ばなな','みかん']} ```
回答: ざっくり考えると、こんな感じでできそうです。 * 最も共通する要素の数が多いリストを「一番マッチングした」ということにします * 比較するリストのリストから「最も○○」な要素(となるリスト)を求めるには、`max`を使うという手があります * 2つのリストで共通する要素は、それぞれをSetにすると積集合として求められます * 共通する要素の数は、積集合の`len`で求められます * `max`で「ある計算で求められる数」により比較するには、キーワード引数`key`を指定します 以上の内容をそのまんまコードにすると、以下のような感じになるかと。 ``` base = ['りんご','ばなな','みかん'] lst = [['いし','やま','りんご','かわ','にんじん'], ['いし','やま','りんご','かわ','にんじん'], ['いし','やま','りんご','ばなな','にんじん'], ['いし','やま','めろん','かわ','にんじん'], ['いし','やま','りんご','ばなな','みかん']] max(lst, key=lambda x: len(set(x) & set(base))) #=> ['いし', 'やま', 'りんご', 'ばなな', 'みかん'] ```