使用pop方法和for循环之间有什么问题吗?当我们不使用彼此相同的变量时



当我们使用的变量不相同时,使用pop方法和for循环之间有问题吗?

这是我的密码。

def tagsnotused(self):
tag_list = self.Tags
tag_list_Names = []
# ~ append list by object Name to use index method later
for Tag in self.Tags:
tag_list_Names.append(Tag.Name)
for Tag in self.Tags:   
# ~ a = 0 tag processed, a = 1 tag not processed
a = 0
# ~ Adding tails
TagName0 = Tag.Name + "."
TagName1 = Tag.Name + "["
TagName2 = Tag.Name + ")"
# ~ Loop for looking conditions
for Prog in self.Program:
for Rout in Prog.Routine:
for Rng in Rout.Rung:
# ~ Condicional para encontrar tag
if (Rng.Content.find(TagName0) != -1 or Rng.Content.find(TagName1) != -1 or  Rng.Content.find(TagName2) != -1) and a == 0:
a = 1
index = tag_list_Names.index(Tag.Name)
value = tag_list.pop(indice)
tag_list_Names.pop(indice)

return tag_list 

问题是,每次我使value = tag_list.pop(indice)成为for循环时,都会跳过一个元素并转到下一个元素。

self.Tags如下list[_object]

您正被列表的可变性所困扰。

taglist = self.Tags使taglist指向与self.Tags相同的列表

为了解决此问题,可以使用copy模块。

from copy import copy

然后使用taglist = copy(self.Tags)创建列表的副本。

您也可以简单地使用taglist = self.Tags[:]

循环中发生的事情是在self.Tags上迭代,当pop()taglist中提取元素时,它也会将其从self.Tags中删除,因为它们都指向同一个对象。这导致你的for循环"向前跳",因为你现在在其中少了一个元素

相关内容

最新更新