Symmetric Difference Based on Function

PythonPythonBeginner
Practice Now

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

Introduction

In Python, the symmetric difference between two lists is a new list containing all elements that are in either of the original lists, but not in both. In this challenge, we will write a function that returns the symmetric difference between two lists, after applying the provided function to each list element of both.


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-13725{{"`Symmetric Difference Based on Function`"}} python/variables_data_types -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/conditional_statements -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/for_loops -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/list_comprehensions -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/lists -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/tuples -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/function_definition -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/importing_modules -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/using_packages -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/standard_libraries -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/math_random -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/data_collections -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} python/build_in_functions -.-> lab-13725{{"`Symmetric Difference Based on Function`"}} end

Symmetric Difference Based on Function

Write a function symmetric_difference_by(a, b, fn) that takes in two lists a and b, and a function fn. The function should return a new list containing all elements that are in either of the original lists, but not in both, after applying the provided function to each list element of both.

To solve this problem, you can follow these steps:

  1. Create a set by applying fn to each element in every list.
  2. Use a list comprehension in combination with fn on each of them to only keep values not contained in the previously created set of the other.
  3. Concatenate the two lists obtained in step 2.

The function should have the following parameters:

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

The function should return a new list containing all elements that are in either of the original lists, but not in both, after applying the provided function to each list element of both.

def symmetric_difference_by(a, b, fn):
  (_a, _b) = (set(map(fn, a)), set(map(fn, b)))
  return [item for item in a if fn(item) not in _b] + [item
          for item in b if fn(item) not in _a]
from math import floor

symmetric_difference_by([2.1, 1.2], [2.3, 3.4], floor) ## [1.2, 3.4]

Summary

In this challenge, we learned how to write a function that returns the symmetric difference between two lists, after applying the provided function to each list element of both. We used a set and list comprehension to achieve this.

Other Python Tutorials you may like