Есть много списков, как показано ниже, но их необходимо исправить.
[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
Любая идея, как решить эту проблему?