#python #list #recursion
Вопрос:
Я видел несколько ответов, которые сглаживали вложенный список целых чисел (первый фрагмент кода) со списком в качестве единственного параметра: flatten(lst)
. Мое задание состоит в том, чтобы сделать то же самое, но с двумя индексами (низкий lt;= высокий), которые указывают диапазон рассматриваемых индексов: flatten(lst, low, high)
.
Рабочий код с одним параметром
def flatten(lst): if not lst: return lst if isinstance(lst[0], list): return flatten(lst[0]) flatten(lst[1:]) return lst[:1] flatten(lst[1:])
Я протестировал свой код с помощью операторов печати, и процесс выравнивания верен, проблема в том, что я не уверен, как вернуть все отдельные значения обратно в список, чтобы вернуть его. Надеюсь, в этом есть смысл, я не уверен, что еще попробовать. Заранее благодарю вас!
Мой код
def flatten(lst, low, high): if low gt; high: return lst elif isinstance(lst[low], list): return flatten(lst[low], 0, len(lst[low]) - 1) flatten(lst[low 1:], 0, len(lst[low 1:]) - 1) else: return lst[:low] flatten(lst[low 1:], 0, len(lst[low 1:]) - 1)
Это то, что я использую для тестирования своего кода.
print(flatten([[1, 2], 3, [4, [5, 6, [7], 8]]], 0, 2))
Ответ №1:
Вы могли бы использовать исходную функцию как есть с назначением индекса:
def flatten(lst): if not lst: return lst if isinstance(lst[0], list): return flatten(lst[0]) flatten(lst[1:]) return lst[:1] flatten(lst[1:]) L = [[1, 2], 3, [4, [5, 6, [7], 8]]] L[0:2] = flatten(L[0:2]) print(L) [1, 2, 3, [4, [5, 6, [7], 8]]]
Или реализуйте новую функцию, которая использует первую:
def flattenRange(L,low,high): L = L.copy() L[low:high] = flatten(L[low:high]) # use high 1 if it is inclusive return L
Или даже «ублюдок», … Я имею в виду «улучшить» оригинал:
def flatten(lst,low=0,high=None): if lowgt;0 or high is not None: lst = lst.copy() lst[low:high] = flatten(lst[low:high]) # use high 1 if it's inclusive return lst if not lst: return lst if isinstance(lst[0], list): return flatten(lst[0]) flatten(lst[1:]) return lst[:1] flatten(lst[1:])
Комментарии:
1. Спасибо вам за ответ! К сожалению, это часть задания, в котором мне нужно реализовать функцию
def flatten(lst, low, high)
:/2. Ален, еще раз спасибо, я настроил функцию «ублюдок», чтобы включить различные низкие значения, и она отлично работает.