python - 在 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 欢迎任何其他一般提示/评论!
解决方案
推荐阅读
- clojure - 防止在 Clojure 中对 require 进行符号调用
- java - 尝试发送邮件时连接重置
- angular - Angular 7 - 如何进行后续的 http 请求
- c++ - 覆盖方法的问题(使用泛型)
- azure-devops - Azure DevOps 不发送部署批准
- python - ValueError:无法将字符串转换为浮点数:'8/19/2014'
- c++ - 第一个 c++ 类,不确定某些事情。特别是“const std::string& 提示
- c# - 每次值不匹配时都会命中 C# 中的条件断点
- networking - Vagrant 无法连接到两个 virtualbox 内部网络
- django - 在 django 模型表单中保存图像失败且没有错误