Решение задачи 'Плоский список' по теме Рекурсия в Python

preview_player
Показать описание
Условие задачи

Рекурсия в Python.
Рекомендации по теме
Комментарии
Автор

def flatten(s):
if not s:
return []
if isinstance(s[0], list):
return flatten(s[0]) + flatten(s[1:])
return s[:1] + flatten(s[1:])

dbte
Автор

мне, пожалуй, нужно объяснение к этому объяснению

AlexanderVolkov-up
Автор

как такое провернуть используя циклы? я имею ввиду вообще как обходить списки с неизвестной вложенностью с помощью циклов?было б интересно разбор увидеть на эту тему. Спасибо

bulik
Автор

Если хотите посмотреть в дебагере без рекурсии
def flatten(a):
b = []
c = []
while True:
if not a and not c:
break
elif not a and c:
a, c = c[:], []
elif not a[0]:
del a[0]
elif type(a[0]) == list:
c.append(a[1:])
a = a[0]
else:
b.append(a.pop(0))
return b

mhntgfmjhg
Автор

ох как же корявенько Артемка объяснил то ))

rollangrant
Автор

def flatten(a):
def func(a, b):
for x in a:
if isinstance(x, int):
b.append(x)
else:
func(x, b)
return b
b = []
func(a, b)
return b

pavelkuznetsov
Автор

а в уроке (42 Рекурсия 2 часть) подобную задачу другим методом решали проверяли на list, а тут как-то можно проверять на int и таким образом решить?

elshabi
Автор

Почему когда исполняется предпоследний вызов рекурсивной функции где список состоит из одной 4ки не вылетает ошибка out of range когда мы запрашиваем список [1:]? ведь 4ка единственная в списке под 0-ым индексом...

uNkindggg
Автор

на вид так просто, а нп деле нифига не понято

glagol
Автор

def get_line_list(d, a=[]):
for i in d:
if not isinstance(i, list):
a.append(i)
elif isinstance(i, list):
get_line_list(i, a)

return a
почему такое решение не проходит?

zvezdodinka
Автор

объясните начинающему, разве так не проще использовать рекурсию:
def flatten(lst, new_lst = []):
for i in lst:
if isinstance(i, list):
flatten(i)
else:
new_lst.append(i)
return new_lst

ДаниилЗамаев
join shbcf.ru