Как вы можете исправить значения списка в порядке увеличения / уменьшения в python - PullRequest
0 голосов
/ 09 января 2020

Есть много списков, как показано ниже, но их необходимо исправить.

[0, 0, 0, 5, 5, 0, 6, 6, 7, 7, 7, 7, 8, 8, 8, 11, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14, 11, 11, 11, 11, 11, 11, 11, 11, 11, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

все списки имеют некоторые общие черты:

1- каждого значения , существует более двух чисел [если это только одно, это, вероятно, неправильно.] Обратите внимание, что есть неправильный 0 в 5, 5, 0, 6, 6, который должен быть 5, 5, 6, 6, 6, или неправильный 14 в 12, 12, 12, 14, 11, 11, 11, 11, который равен 11 или 12.

2- значения всего списка увеличиваются / уменьшаются или оба [увеличиваются в некоторой части и уменьшаются в некоторых других]: обратите внимание, что список начинается с 5,6,7 до 12, а затем уменьшается до 3.

3 - неправильное число может повторяться два раза, например:

[0, 0, 8, 0, 0, 0, 12, 12, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 9, 6, 6, 6, 6, 6, 5, 5, 5, 5, 0]

Обратите внимание, что в 0, 0, 0, 12, 12, 6, 6, 0, 0, 0, 0, все 12, 12, 6, 6 неверны и должны быть 0

4-два продолжения значения не могут изменяться более одного. при внезапном изменении от 0 до 4, например, в 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4 это должно быть 0,1,1,1,2,2,2,3,3,3,4,4,4

Сначала я попробовал:

for i in range(1,len(lis)-1):
    if lis[i+1] == lis [i-1]:
        lis[i]= lis[i+1]

, который работал хорошо для отдельных значений, но не работал для неправильных значений ребер, таких как 12, 12, 12, 14, 11, 11, 11, 11

, тогда я попытался:

for i in range(1,len(lis)):
    if not (lis[i]-lis[i-1]==1 or lis[i]-lis[i-1]==-1):
        lis[i]=lis[i-1]

, который на самом деле не работает: | Потому что он распознает начальную точку как неправильное значение. в 0, 4, 4, 4 0-4 больше, чем единица.

Наконец, я попытался:

for i in range(1,len(lis)-1):
    if lis[i+1]== [i-1]:
        lis[i]=lis[i-1]
    if not(lis[i-1]-lis[i]==1 or  lis[i-1]-lis[i]==-1):
        if not (lis[i-1] ==0 ):
            lis[i]=lis[i-1]

это работает хорошо, но все еще есть проблема с:

-повторным неправильно между 0, как: 0, 0, 0, 12, 12, 6, 6, 0, 0, 0, 0,

  • начальная и конечная точка, что есть скачок, как: 0, 4, 4, 4

Любая идея, как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...