diff --git a/snippets/union.md b/snippets/union.md new file mode 100644 index 000000000..9250cc042 --- /dev/null +++ b/snippets/union.md @@ -0,0 +1,17 @@ +--- +title: union +tags: list,beginner +--- + +Returns every element that exists in any of the two lists once. + +Create a `set` with all values of `a` and `b` and convert to a `list`. + +```py +def union(a,b): + return list(set(a + b)) +``` + +```py +union([1, 2, 3], [4, 3, 2]) # [1,2,3,4] +``` diff --git a/snippets/union_by.md b/snippets/union_by.md new file mode 100644 index 000000000..f28886c89 --- /dev/null +++ b/snippets/union_by.md @@ -0,0 +1,20 @@ +--- +title: union_by +tags: list,function,intermediate +--- + +Returns every element that exists in any of the two lists once, after applying the provided function to each element of both. + +Create a `set` by applying `fn` to each element in `a`, then use list comprehension in combination with `fn` on `b` to only keep values not contained in the previously created set, `_a`. +Finally, create a `set` from the previous result and `a` and transform it into a `list` + +```py +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])) +``` + +```py +from math import floor +union_by([2.1], [1.2, 2.3], floor) # [2.1, 1.2] +``` \ No newline at end of file