Код: Выделить всё
def apply_pattern_to_list(L, pattern='+-', from_start=True):
def is_consistent(a, b, p):
return (p == '+' and a < b) or (p == '-' and a > b)
result = {}
pattern = pattern * (len(L) // len(pattern) + 1)
if from_start:
i = 0
while i < len(L) - 1:
if not is_consistent(L[i], L[i+1], pattern[i % len(pattern)]):
result[i+1] = L.pop(i+1)
else:
i += 1
else:
i = len(L) - 1
while i > 0:
if not is_consistent(L[i-1], L[i], pattern[(len(L)-i) % len(pattern)]):
result[i-len(L)] = L.pop(i-1)
else:
i -= 1
return result
Функция должна удалять элементы, не соответствующие заданному шаблону, либо из начала, либо из конца списка, и возвращать словарь удаленных элементов с их позициями.
Текущие проблемы
Вывод не соответствует ожидаемому результату. В некоторых случаях возникает ошибка IndexError, особенно если from_start=False.
Вопросы
- Какие изменения необходимы для исправления вывода и соответствия ожидаемому поведению?
- Как устранить ошибку IndexError, особенно для from_start=False< /code> случай?
- Есть ли какие-либо логические ошибки в моей реализации приложения шаблона?
Функция должна работать с различными шаблонами и списками входных данных, как показано в тестовых примерах.
- Ожидаемый результат
- Ожидается вместе с моим результатом
Подробнее здесь: https://stackoverflow.com/questions/790 ... ted-output