List Union Based on Function | Challenge

PythonPythonBeginner
Practice Now

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

Introduction

In Python, we can use the set() function to get the union of two lists. However, sometimes we need to apply a function to each element of both lists before getting the union. In this challenge, you will create a function that returns the union of two lists based on a provided function.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("`Python`")) -.-> python/BasicConceptsGroup(["`Basic Concepts`"]) python(("`Python`")) -.-> python/ControlFlowGroup(["`Control Flow`"]) python(("`Python`")) -.-> python/DataStructuresGroup(["`Data Structures`"]) python(("`Python`")) -.-> python/FunctionsGroup(["`Functions`"]) python(("`Python`")) -.-> python/ModulesandPackagesGroup(["`Modules and Packages`"]) python(("`Python`")) -.-> python/PythonStandardLibraryGroup(["`Python Standard Library`"]) python/BasicConceptsGroup -.-> python/comments("`Comments`") python/BasicConceptsGroup -.-> python/variables_data_types("`Variables and Data Types`") python/ControlFlowGroup -.-> python/conditional_statements("`Conditional Statements`") python/ControlFlowGroup -.-> python/for_loops("`For Loops`") python/ControlFlowGroup -.-> python/list_comprehensions("`List Comprehensions`") python/DataStructuresGroup -.-> python/lists("`Lists`") python/DataStructuresGroup -.-> python/tuples("`Tuples`") python/FunctionsGroup -.-> python/function_definition("`Function Definition`") python/ModulesandPackagesGroup -.-> python/importing_modules("`Importing Modules`") python/ModulesandPackagesGroup -.-> python/using_packages("`Using Packages`") python/ModulesandPackagesGroup -.-> python/standard_libraries("`Common Standard Libraries`") python/PythonStandardLibraryGroup -.-> python/math_random("`Math and Random`") python/PythonStandardLibraryGroup -.-> python/data_collections("`Data Collections`") python/FunctionsGroup -.-> python/build_in_functions("`Build-in Functions`") subgraph Lab Skills python/comments -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/variables_data_types -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/conditional_statements -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/for_loops -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/list_comprehensions -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/lists -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/tuples -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/function_definition -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/importing_modules -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/using_packages -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/standard_libraries -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/math_random -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/data_collections -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} python/build_in_functions -.-> lab-13205{{"`List Union Based on Function | Challenge`"}} end

List Union Based on Function

Problem

Write a function union_by(a, b, fn) that takes in two lists a and b, and a function fn. The function should return a list that contains every element that exists in any of the two lists once, after applying the provided function to each element of both.

To solve this problem, you can follow these steps:

  1. Create a set by applying fn to each element in a.
  2. Use a list comprehension in combination with fn on b to only keep values not contained in the previously created set, _a.
  3. Finally, create a set from the previous result and a and transform it into a list.

The function should have the following input parameters:

  • a: a list of elements
  • b: a list of elements
  • fn: a function that takes an element and returns a value

The function should return a list of elements.

Example

Here's an example of what union_by() should do:

from math import floor

union_by([2.1], [1.2, 2.3], floor) ## [2.1, 1.2]

In this example, union_by() takes in two lists [2.1] and [1.2, 2.3], and a function floor(). The function applies floor() to each element of both lists, creating a set of {2}. Then, it uses a list comprehension to keep only the values not contained in the set, which is [1.2]. Finally, it creates a set from the previous result and [2.1], which is {1.2, 2.1}, and transforms it into a list [1.2, 2.1].

Summary

In this challenge, you learned how to create a function that returns the union of two lists based on a provided function. You also learned how to apply a function to each element of a list, create a set from a list, and transform a set into a list.

Other Python Tutorials you may like