Функция расплющивания рекурсивно проходит по вложенному списку и собирает все элементы в список одного уровня. Она использует рекурсию для обработки произвольной глубины вложенности.
def flatten(lst):
result = []
for item in lst:
if isinstance(item, list):
result.extend(flatten(item)) # Recurse into nested list
else:
result.append(item) # Append non-list item directly
return result
item во входном списке проверяем, является ли он экземпляром listflatten() для этого элемента и расширяем результатflatten([1, [2, [3, 4]], 5])
# Returns: [1, 2, 3, 4, 5]
Стек вызовов обрабатывает это следующим образом:
[1, [2, [3, 4]], 5] — верхний уровень[2, [3, 4]] — первый вложенный уровень[3, 4] — самый глубокий вложенный уровеньflatten()isinstance(item, list) — это проверка типа, которая управляет логикой ветвленияresult.extend(...) объединяет возвращённый подсписок вместо его вложенияtuple или set без измененийПроверка isinstance(item, list) необходима, чтобы различать рекурсивные случаи, требующие дальнейшей развёртки, и базовые случаи, которые можно добавить напрямую.
Новый — ещё не проверен сообществом
Вы