Индекс популярности выпадает из диапазона, презирая, уменьшая копию исходного списка - PullRequest
0 голосов
/ 04 февраля 2020

Это была постоянная проблема. Я пытаюсь увидеть, что если данный список является строго возрастающей последовательностью, если я удаляю не более одного элемента из списка. Это моя попытка:

def almostIncreasingSequence(sequence):
    new_seq = sequence.copy()

    output = False

    for i in range(len(sequence) - 1):
        new_seq.pop(i)
        if all(i < j for i, j in zip(new_seq, new_seq[1:])):
            output = True
        else:
            output = False

    return output

Как видите, я создаю копию исходного массива, чтобы не изменять его длину, и все еще получаю эту ошибку:

Traceback (most recent call last):
  main.py3 in the pre-written template, in getUserOutputs
    userOutput = _runkkown(testInputs[i])
  main.py3 in the pre-written template, in _runkkown
    return almostIncreasingSequence(*_fArgs_bfjukyininyb)
  main.py3 on line 7, in almostIncreasingSequence
    new_seq.pop(i)
IndexError: pop index out of range

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Вам необходимо выполнить проверку new_seq, чтобы убедиться, что вы не пытаетесь выдать index, который не существует. Мы можем использовать len() для этого, затем вы можете продолжить свои проверки после возврата результата.

def almostIncreasingSequence(sequence):
    new_seq = sequence.copy()

    output = False

    for i in range(len(sequence) - 1): 

        if len(new_seq) > i: # If we can pop, we pop.
            new_seq.pop(i)
        else: # Else if we can no longer pop without causing an error, we perform our check and output the result
            if all(i < j for i, j in zip(new_seq, new_seq[1:])):
                return True
            else:
                return False


lis = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

print(almostIncreasingSequence(lis))

#True
0 голосов
/ 04 февраля 2020

Попробуйте это? Список будет монотонным (удаляя хотя бы 1 элемент), если он равен упорядоченному списку!

def almostIncreasingSequence(sequence):
    for i in range(len(sequence)):
        new_seq = sequence.copy()
        del new_seq[i]
        not_sorted = new_seq.copy()
        new_seq.sort()
        if new_seq == not_sorted:
           return True
    return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...