I have a list [a1,21,...]
and would like to split it based on the value of a function f(a)
.
For example if the input is the list [0,1,2,3,4]
and the function def f(x): return x % 3
,
I would like to return a list [0,3], [1,4], [2]
, since the first group all takes values 0
under f
, the 2nd group take value 1
, etc...
Something like this works:
return [[x for x in lst if f(x) == val] for val in set(map(f,lst))]
,
But it does not seem optimal (nor pythonic) since the inner loop unnecessarily scans the entire list and computes same f values of the elements several times.
I'm looking for a solution that would compute the value of f
ideally once for every element...