当我们使用的变量不相同时,使用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循环"向前跳",因为你现在在其中少了一个元素