Python 元素删除后的内部循环行为
我有一个包含其他列表和字典值的大型元素列表。基本结构是:Python 元素删除后的内部循环行为,python,loops,Python,Loops,我有一个包含其他列表和字典值的大型元素列表。基本结构是: 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,-
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个元素已经被删除,并且不再需要继续迭代它的内部元素。不,Python“不够聪明”,无法完成您假设的操作。如果不希望删除后内部循环继续,则肯定需要一些硬编码的continue
s/break
s
通常,您不应该删除正在循环的容器的元素。我不清楚您在示例代码中到底在做什么,但有一个示例允许(尽管仍然不赞成)在列表上向后循环(这是您正在尝试的吗?)并删除当前或以后的元素
另外,当
i
不是索引而是实际的i
第个元素本身时,您确定要删除i
第个元素吗?为什么不打印(i)并自己测试呢?del outer[i]
不会做您认为它会做的事情i
是元素,而不是它的索引。你是指类似于i的,在枚举中内部(外部):
?@Yevhen Kuzmovych不确定你在这里引用的是什么。@Barmar我不熟悉使用枚举的方法,我会看看它。我要说的是,移除元素正是我想要做的。实际上,我对索引一点也不感兴趣,但当我删除元素时,当前的I
将变成以前的I
,这就是我开始问这个问题的原因。谢谢你,我认为将continue合并到这个元素中是必要的。我尽量避免在可能的情况下使用continue/break,通常在这种情况下,可能有更好的方法来更pythonically地实现这种逻辑。关于不删除我正在循环的容器的元素;这也是我所知道的。现实地复制并删除其中的元素将是一种更好的方法。我再也找不到确切的参考资料了,但是这段代码部分地解决了另一个问题,但是它没有澄清这个问题。