Как проверить, был ли посещен элемент списка - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь создать список полного набора зависимостей (рекурсивный обход зависимостей) для данного плагина Jenkins. Я пробовал этот фрагмент кода ниже.

from requests import Session

session = Session()

deps = []

def get_deps():
    user_input = input('Enter a jenkins plug-in name: ')
    print(user_input)
    url = "https://plugins.jenkins.io/api/plugin/"+user_input+""
    reqs = session.get(url)
    response = reqs.json()
    for item in response['dependencies']:
        print(item['name'])
        deps.append(item['name'])
    print(deps)
    
    for elem in deps:
        url = "https://plugins.jenkins.io/api/plugin/"+elem+""
        reqs = session.get(url)
        response = reqs.json()
        for item in response['dependencies']:
            deps.append(item['name'])
        print(deps)
        

get_deps()

Это создаст бесконечный l oop. Как гарантировать, что элемент списка, который был посещен ранее, не подвергся повторному действию?

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Вы можете сделать это рекурсивным способом:

from requests import Session

session = Session()

deps = []
# name = "dotnet-as-script"

def get_deps(name):
    if name not in deps:
        deps.append(name)
        url = f"https://plugins.jenkins.io/api/plugin/{name}"
        reqs = session.get(url)
        response = reqs.json()
        for item in response['dependencies']:
            print(item['name'])
            deps.append(item['name'])
            get_deps(item['name'])


name = input("Please enter the plugin name:")
get_deps(name)

print(deps)

Каждый раз, когда вызывается get_deps, он проверяет, есть ли зависимость уже в списке. Если нет, он получает зависимости для этого плагина и для каждого из них снова вызывает ту же функцию.

Ваш код произвел бесконечное l oop, поскольку он расширял список без проверки дубликатов, он повторяется.

0 голосов
/ 09 июля 2020

Таким образом, когда все элементы будут посещены, все из lst1 будет перенесено в lst2:

lst1 = [1, 2, 3, 4, 5, 6]
if lst1:
# do something
lst2.append(lst1.pop(lst1.index(3))) # move the element (in this example, 3) from lst1 to lst2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...