はじめに
Python では、2 つのリストの和集合を取得するには set() 関数を使用できます。ただし、時々、和集合を取得する前に、2 つのリストの各要素に関数を適用する必要があります。このチャレンジでは、提供された関数に基づいて 2 つのリストの和集合を返す関数を作成します。
関数に基づくリストの和集合
union_by(a, b, fn) という関数を作成します。この関数は、2 つのリスト a と b と関数 fn を受け取ります。この関数は、両方のリストの各要素に提供された関数を適用した後、2 つのリストのいずれかに存在するすべての要素を一度だけ含むリストを返す必要があります。
この問題を解決するには、次の手順を辿ることができます。
aの各要素にfnを適用することでsetを作成します。- 以前作成したセット
_aに含まれていない値のみを保持するために、bでfnと組み合わせたリスト内包表記を使用します。 - 最後に、以前の結果と
aからsetを作成し、それをlistに変換します。
この関数は次の入力パラメータを持つ必要があります。
a: 要素のリストb: 要素のリストfn: 要素を受け取り、値を返す関数
この関数は要素のリストを返す必要があります。
def union_by(a, b, fn):
_a = set(map(fn, a))
return list(set(a + [item for item in b if fn(item) not in _a]))
from math import floor
union_by([2.1], [1.2, 2.3], floor) ## [2.1, 1.2]
まとめ
このチャレンジでは、提供された関数に基づいて 2 つのリストの和集合を返す関数を作成する方法を学びました。また、リストの各要素に関数を適用する方法、リストからセットを作成する方法、およびセットをリストに変換する方法も学びました。