Nano Hash - криптовалюты, майнинг, программирование

Понимание isinstance в рекурсии

Так что в основном у меня проблемы с пониманием этих двух концепций. Я гуглил в течение 2 дней и играл с этими двумя, чтобы создать какую-то картинку для себя, но все еще похоже, что я не совсем все понимаю. Насколько я понимаю, isinstance используется как основа рекурсии, если вам нужно работать с многоуровневым списком, и он возвращает true или false в зависимости от того, является ли элемент? относится к указанному типу. Дело в том, что я знаю его определение, но я просто не могу заставить себя понять, как он на самом деле работает, чтобы на самом деле его использовать. Я подумал, что могу привести пример кода, и, возможно, кто-то из вас сможет подробно объяснить, как работает функция во всех деталях. Вот:

def first_and_last(a):
    if not (isinstance(a,list)):
        return a
    elif a == []:
        return []
    else:
        return [first_and_last(a[0]), first_and_last(a[-1])]


print(first_and_last([[1, 2, 3, [3, 3, 4, 5]], 6, 7, 7]))

По сути, этот код используется учителем, но идея кода состоит в том, чтобы возвращать первый и последний элемент каждого уровня списка.


Ответы:


1

Просто наметьте рекурсию здесь:

first_and_last([[1, 2, 3, [3, 3, 4, 5]], 6, 7, 7])
   a is a list and not equal to []
   first_and_last([1, 2, 3, [3, 3, 4, 5]])
       a is a list and not equal to []
       first_and_last(1)
           a is not a list
           return 1
       first_and_last([3, 3, 4, 5])
           a is a list and not equal to []
           first_and_last(3)
               a is not a list
               return 3
           first_and_last(5)
               a is not a list
               return 5
           return [3, 5]
       return [1, [3, 5]]
   first_and_last(7)
       a is not a list
       return 7
   return [[1, [3, 5]], 7]

Таким образом, isinstance() просто используется, чтобы найти, когда значение, переданное в этом вызове, не является списком, чтобы завершить рекурсивное дерево вызовов.

27.01.2014
  • С большой любовью к тебе человек! эта проблема беспокоила меня некоторое время, и теперь я, наконец, понимаю, как это работает. В конце концов я посмотрел ваше объяснение и прогнал каждую команду, которую функция должна была выполнить вручную, чтобы увидеть, как она все это строит. 28.01.2014

  • 2

    isinstance используется для многократного вызова first_and_last по мере того, как вы можете углубляться во вложенные списки. Рассмотрим первые несколько вызовов: в первом вызове a[0] это список: [1,2,3[3,3,4,5]], но при следующем вызове a[0] является целым числом 1. Вы не можете вкладываться в целое число, и isinstance является условием для определения того, что вы достигли уровня "сырых" элементов списка в "списке списков списков..." иерархической структуры. Поскольку вы всегда обращаетесь к первому (a[0]) или последнему (a[-1]) элементу списка, тот факт, что это не список, означает, что это то, что вы хотите вернуть (первый или последний элемент списка, при условии, что это не список). внутренний список).

    Второе условие защищает от вызова a[0] и a[-1] в пустом списке. Если случится так, что во входном параметре содержится пустой список, он просто вернет его сразу, не пытаясь обработать его несуществующие элементы.

    27.01.2014
  • И вам тоже спасибо! Вы объяснили это в работах, и парень, прежде чем вы объяснили это как код. Идеальный ответ на мою проблему! 28.01.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..