関数に基づくリストの差分

PythonPythonBeginner
オンラインで実践に進む

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Python では、組み込みの set() 関数を使って、2 つのリストの違いを簡単に見つけることができます。ただし、両方のリストの各要素に適用される特定の関数に基づいて違いを見つけたい場合はどうでしょうか。このチャレンジでは、2 つのリストと関数を受け取り、両方のリスト要素に提供された関数を適用した後の 2 つのリストの違いを返す関数を作成します。

関数に基づくリストの差分

difference_by(a, b, fn) という名前の関数を作成します。この関数には 3 つのパラメータが渡されます。

  • a: 要素のリスト
  • b: 要素のリスト
  • fn: 両方のリストの各要素に適用される関数

この関数は、両方のリストの各要素に提供された関数 fn を適用した後、リスト a には含まれているがリスト b には含まれていない要素のリストを返す必要があります。

この問題を解くには、次の手順を辿ることができます。

  1. map() を使って fnb の各要素に適用し、set を作成します。
  2. afn と組み合わせてリスト内包表記を使って、以前作成した _b に含まれていない値のみを残します。
def difference_by(a, b, fn):
  _b = set(map(fn, b))
  return [item for item in a if fn(item) not in _b]
from math import floor

difference_by([2.1, 1.2], [2.3, 3.4], floor) ## [1.2]
difference_by([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], lambda v : v['x'])
## [ { x: 2 } ]

まとめ

このチャレンジでは、両方のリストの各要素に適用される特定の関数に基づいて 2 つのリストの違いを見つける方法を学びました。また、問題を解決するために map()set()、およびリスト内包表記を使用する練習も行いました。