関数に基づくリストの和集合

Beginner

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

はじめに

Python では、2 つのリストの和集合を取得するには set() 関数を使用できます。ただし、時々、和集合を取得する前に、2 つのリストの各要素に関数を適用する必要があります。このチャレンジでは、提供された関数に基づいて 2 つのリストの和集合を返す関数を作成します。

関数に基づくリストの和集合

union_by(a, b, fn) という関数を作成します。この関数は、2 つのリスト ab と関数 fn を受け取ります。この関数は、両方のリストの各要素に提供された関数を適用した後、2 つのリストのいずれかに存在するすべての要素を一度だけ含むリストを返す必要があります。

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

  1. a の各要素に fn を適用することで set を作成します。
  2. 以前作成したセット _a に含まれていない値のみを保持するために、bfn と組み合わせたリスト内包表記を使用します。
  3. 最後に、以前の結果と 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 つのリストの和集合を返す関数を作成する方法を学びました。また、リストの各要素に関数を適用する方法、リストからセットを作成する方法、およびセットをリストに変換する方法も学びました。