For example if I have a list as follows:
[3, 3, 3, 3, 3, 3, 100, 1, 1, 1, 1, 1, 1, 200, 3, 3, 3, 100, 1, 1, 1]
How can I remove the duplicate elements and represent the same element followed by the number of times it's repeating? Example Output:
[3, 6, 100, 1, 6, 200, 3, 3, 100, 1, 3]
Where 3 is repeating 6 times... 1 repeating 6 times... and so on
You can use itertools.groupby
with a generator function here:
>>> from itertools import groupby
>>> lst = [3, 3, 3, 3, 3, 3, 100, 1, 1, 1, 1, 1, 1, 200, 3, 3, 3, 100, 1, 1, 1]
>>> def solve(seq):
for k, g in groupby(seq):
length = sum(1 for _ in g)
if length > 1:
yield k
yield length
else:
yield k
...
>>> list(solve(lst))
[3, 6, 100, 1, 6, 200, 3, 3, 100, 1, 3]