首页 > 解决方案 > 在 for 循环迭代期间从列表中弹出项目的正确方法是什么?

问题描述

我正在开发一个小项目,该项目需要一个包并将其所有依赖项返回到第 N 级。
这是我当前的代码:

def get_child(db, pkg_list):  # recursively lists all dependencies for a given package
    for pkg in pkg_list:
        if pkg in db:
            for dep in db[pkg]['Dependencies']:
                if not dep in pkg_list:  # prevents circular dependency problems
                    pkg_list.append(dep) 
                else:  # if package is already in list, need to move it to end of list
                    pkg_list.append(pkg_list.pop(pkg_list.index(dep))) # THIS IS PROBLEMATIC
    pkg_list.reverse()
    return pkg_list

此函数将搜索 JSON 数据库(其中数据组织为这样的 dict):

{
'Package Name': {                                     
        'URL': ['http://asdfasdfasdf','http://.patch'],   
        'Dependencies': [
                'first', 'second'             
            ]
        }
}

并将(级别 1)依赖项添加到 pkg_list,然后找到这些包(级别 2)的依赖项,直到没有更多依赖项可以列出。然后将该列表反转,以便在所需的包之前安装依赖项。


一些依赖共享依赖,为了防止无限循环,需要将它们移动到列表的末尾。问题是,当我弹出一个列表项以将其移至末尾时,for 循环会跳过列表中的下一项 - 可能与 Python 在循环期间索引列表的方式有关。
我的问题是,是否可以在迭代期间从列表中弹出一个项目而不用 Python 跳过任何内容?PS 欢迎任何其他一般提示/评论!

标签: pythonpython-3.xlistloopsrecursion

解决方案


推荐阅读