diff --git a/package.json b/package.json index 3fb76ce6b..e48cacbba 100644 --- a/package.json +++ b/package.json @@ -69,4 +69,4 @@ "rollup-plugin-babel": "^4.0.3", "rollup-plugin-babel-minify": "^4.0.0" } -} \ No newline at end of file +} diff --git a/snippets/symmetric_difference.md b/snippets/symmetric_difference.md new file mode 100644 index 000000000..c6b4e4ab5 --- /dev/null +++ b/snippets/symmetric_difference.md @@ -0,0 +1,18 @@ +--- +title: symmetric_difference +tags: list,beginner +--- + +Returns the symmetric difference between two iterables, without filtering out duplicate values. + +Create a `set` from each list, then use list comprehension on each one to only keep values not contained in the previously created set of the other. + +```py +def symmetric_difference(a, b): + _a, _b = set(a), set(b) + return [item for item in a if item not in _b] + [item for item in b if item not in _a] +``` + +```py +symmetric_difference([1, 2, 3], [1, 2, 4]) # [3, 4] +``` diff --git a/snippets/symmetric_difference_by.md b/snippets/symmetric_difference_by.md new file mode 100644 index 000000000..848ac3fc7 --- /dev/null +++ b/snippets/symmetric_difference_by.md @@ -0,0 +1,19 @@ +--- +title: symmetric_difference_by +tags: list,function,intermediate +--- + +Returns the symmetric difference between two lists, after applying the provided function to each list element of both. + +Create a `set` by applying `fn` to each element in every list, then use list comprehension in combination with `fn` on each one to only keep values not contained in the previously created set of the other. + +```py +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] +``` + +```py +from math import floor +symmetric_difference_by([2.1, 1.2], [2.3, 3.4],floor) # [1.2, 3.4] +``` \ No newline at end of file