我有一个包含其他列表和字典值的大量元素列表。基本结构是:
for i in outer:
for j in range(len(inner)-1,-1,-1):
if j:
del outer[i]
因此,嵌套结构中数据的存在决定了我们是否将整个元素保留在外部列表中。删除元素会在外部列表中立即发生转变。
我是否需要明确地继续控制逻辑,或者这是否会隐式发生?
for i in outer:
for j in range(len(inner)-1,-1,-1):
if j:
del outer[i]
continue
我目前正在使用以前的设置,它似乎在运行测试时给出了我想要的结果。我想我只是想确定内部循环是否会在调用del
之后不必要地运行,或者Python是否足够聪明以便知道前一个第i个元素已被删除而且不再需要继续迭代它的内部。
答案 0 :(得分:1)
不,Python不够“足够聪明”去做你所假设的事情。如果您不希望在删除后继续内循环,则肯定需要一些硬编码的continue
s / break
。
通常,您不应删除正在循环的容器的元素。我不清楚你在你的示例代码中到底在做什么,但允许它(虽然仍然不赞成)的一个例子是在列表上向后循环(你正在尝试的是什么?)并删除当前或后来的元素。
顺便说一句,如果i
不是索引而是实际的outer
,您确定要删除i
的{{1}}个元素吗?元素本身?