python循环扩展

2024-04-18 21:06:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道为什么for循环没有扩展它的迭代:

    for link in frontLinks:  
        #try:           
        getCurlink = self.getHref(link) # get current site links
        #print getCurlink
        #print frontLinks 
        if getCurlink:
            frontLinks = frontLinks + getCurlink

这条线:

^{pr2}$

不适用于“for”循环的frontLinks。有什么想法吗??在


Tags: inselfforgetiflinksitelinks
3条回答

迭代列表时不会看到列表中的更改。在

您需要使用类似于:

 while i < len(frontLinks):
     link = frontLinks[i]
     ...
     if condition:
       frontLinks.append(item)
     i += 1

for循环对其表达式求值一次,以获得迭代器。稍后,将名称frontLinks重新绑定为新列表。新列表与for循环没有任何关系。在

虽然在迭代列表的同时修改列表是很困难的,但是可以添加到列表的末尾,这样就可以了。将最后一行改为:

frontLinks.extend(getCurlink)

虽然您可以在迭代时追加到列表,但我将使用一个list和一个deque(您可以使用list代替deque,只需将todo.popleft()替换为todo.pop(0)):

from collections import deque

done = []
todo = deque(frontLinks) # your initial frontLinks
while todo:
    link = todo.popleft() # take the first element from todo
    getCurlink = self.getHref(link) # get current site links
    if getCurlink:
        todo.extend(getCurlink) # extend the todo list
    done.append(link)

这样,您总是有两个具有明确角色的集合:todo和{}。您可以停止/恢复迭代、转储/加载当前状态等,而不必重新启动整个过程。在

相关问题 更多 >