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

Поділитися
Вставка
  • Опубліковано 14 бер 2022
  • Условие задачи
    stepik.org/lesson/372094/step...
    Рекурсия в Python.
    • 29 Вложенные списки Py...

КОМЕНТАРІ • 18

  • @user-uc5vw6ls9k
    @user-uc5vw6ls9k 3 роки тому +7

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

    • @egoroffchannel
      @egoroffchannel  3 роки тому

      а объяснение к объяснению объяснения не нужно?)

    • @user-qc4po6rj9i
      @user-qc4po6rj9i 2 роки тому

      @@egoroffchannel 🤯

    • @Dryagin_Andry
      @Dryagin_Andry Рік тому

      @@egoroffchannel это уже некая рекурсия получится...

  • @dbte5
    @dbte5 2 роки тому +3

    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:])

  • @rollangrant8347
    @rollangrant8347 Рік тому +5

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

  • @elshabi9558
    @elshabi9558 3 роки тому

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

  • @bulik1384
    @bulik1384 3 роки тому +3

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

    • @shinigami_yokoso
      @shinigami_yokoso Рік тому +1

      цикл while, причем довольно несложно

  • @glagol12
    @glagol12 2 роки тому +6

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

  • @uNkindggg
    @uNkindggg 3 роки тому +1

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

    • @gradus1781
      @gradus1781 3 роки тому

      Там [:1], а не [1:]

  • @user-uz8sb2es7i
    @user-uz8sb2es7i Рік тому +1

    Если хотите посмотреть в дебагере без рекурсии
    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

  • @user-tx7zj8tn8h
    @user-tx7zj8tn8h Рік тому +3

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

  • @pavelkuznetsov8106
    @pavelkuznetsov8106 Рік тому

    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

  • @zvezdodinka
    @zvezdodinka Рік тому

    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
    почему такое решение не проходит?

    • @user-qn9jh1lm6t
      @user-qn9jh1lm6t Рік тому

      Зачем этот список а? Можно же проще:
      def linear(sp):
      s = []
      for i in sp:
      if isinstance (i,list):
      linear (i)
      else:
      s.append(i)
      return s

    • @user-qn9jh1lm6t
      @user-qn9jh1lm6t Рік тому

      Потому что с этим а при повторном вызове функции он останется таким же как после прошлого вызова