первый аргумент представляет собой список целых чисел,
второй аргумент представляет собой непустую строку (шаблон), состоящую из + и - только (по умолчанию установлено значение «+-»), а
третий аргумент имеет значение True или False (по умолчанию установлено значение True).Если третий аргумент равен True, то снова и снова удаляется самый левый элемент, что предотвращает согласованность того, что осталось от начала до этого элемента, с шаблоном, читаемым слева направо верно. Если третий аргумент имеет значение False, то снова и снова удаляется самый правый элемент, который не позволяет тому, что осталось от этого элемента до конца, соответствовать шаблону, читаемому справа налево.
А + в шаблоне соответствует двум последовательным элементам, второй из которых строго больше первого.
А - в шаблоне соответствует двум последовательным элементам второй из них строго меньше первого.
Шаблон следует рассматривать как круговой (как будто обволакивающий его), поэтому нет никакой разницы между шаблоном и многими конкатенациями. этого шаблона (например, нет разницы между шаблонами «+», «++», «+++», ... и нет разницы между шаблонами «+-», «+-+-» ', '+-+-+-'...
Функция возвращает словарь для всего, что было удалено: где в созданном списке был удален элемент (ключ , как положительный индекс при обработке списка и шаблона слева направо, как отрицательный индекс при обработке списка и шаблона справа налево) и что это за элемент (значение).
Функция изменяет список, предоставленный в качестве аргумента, и возвращает словарь.
Код: Выделить всё
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
введите здесь описание изображения
- Определение функции:
2)Вспомогательная функция:
Проверяется, соответствуют ли два соседних элемента (a и b) шаблону p.
- Инициализация:
Создает пустой словарь для хранения удаленных элементов и расширяет шаблон на всю длину списка.
Затем код разветвляется на основе параметра from_start:
Это происходит по списку, проверяя каждую пару соседних элементов. Если они не соответствуют шаблону, он удаляет второй элемент и добавляет его в словарь результатов.
Это делает то же самое, но начинается с конца списка и перемещается назад.
- Оператор возврата:
Подробнее здесь: https://stackoverflow.com/questions/790 ... leshoot-it