What is the faster way to count occurrences of equal sublists in a nested list?
If order does not matter you could use collections.Counter with extended iterable unpacking, as a variant of @Chris_Rands solution:
from collections import Counter
l = [[1, 3, 2], [1, 3, 2] ,[1, 3, 5]]
result = [[*t, count] for t, count in Counter(map(tuple, l)).items()]
print(result)
Output
[[1, 3, 5, 1], [1, 3, 2, 2]]
This is quite an odd output to want but it is of course possible. I suggest using collections.Counter()
, no doubt others will make different suggestions and a timeit
style comparison would reveal the fastest of course for particular data sets:
>>> from collections import Counter
>>> l = [[1, 3, 2], [1, 3, 2] ,[1, 3, 5]]
>>> [list(k) + [v] for k, v in Counter(map(tuple,l)).items()]
[[1, 3, 2, 2], [1, 3, 5, 1]]
Note to preserve the insertion order prior to CPython 3.6 / Python 3.7, use the OrderedCounter
recipe.