はじめに
Python では、組み込みの set()
関数を使って、2 つのリストの違いを簡単に見つけることができます。ただし、両方のリストの各要素に適用される特定の関数に基づいて違いを見つけたい場合はどうでしょうか。このチャレンジでは、2 つのリストと関数を受け取り、両方のリスト要素に提供された関数を適用した後の 2 つのリストの違いを返す関数を作成します。
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
には含まれていない要素のリストを返す必要があります。
この問題を解くには、次の手順を辿ることができます。
map()
を使って fn
を b
の各要素に適用し、set
を作成します。a
の fn
と組み合わせてリスト内包表記を使って、以前作成した _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()
、およびリスト内包表記を使用する練習も行いました。