pythonsequencesmoothing

How can I smooth list of numerical values in Python?


I have a collection of lists of integer values in Python like the following:

[0, 0, 1, 0, 1, 0, 0, 2, 1, 1, 1, 2, 1]

Now I would like to have a somewhat "smoothed" sequence where each value with the same preceding and following value (which both differ from the central value in question) is replaced with this preceeding-following value. So my list above becomes:

[0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1, 1]

(The order or procession is from left to right, just to reconcile possible conflicting groupings.)

How could I achieve the list?

Bonus: the same as above with possible parametrization: How many preceeding-following values must occur to change the central value (2-2 or 3-3 instead of just 1-1)?


Solution

  • A straightforward loop should do the trick:

    _list = [0, 0, 1, 0, 1, 0, 0, 2, 1, 1, 1, 2, 1]
    
    for i in range(1, len(_list)-1):
        if _list[i-1] == _list[i+1]:
            _list[i] = _list[i-1]
    
    print(_list)
    

    Output:

    [0, 0, 0, 0, 0, 0, 0, 2, 1, 1, 1, 1, 1]