0

forループが反復を拡張しないのはなぜだろうか:

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

この行:

frontLinks = frontLinks + getCurlink

"for" ループの frontLinks には適用されません。何か案は??

4

3 に答える 3

7

forループは、イテレータを取得するために、その式を1回評価します。後で、名前を再バインドしfrontLinksて新しいリストにします。新しいリストは、forループとは何の関係もありません。

リストを繰り返しながら変更するのは難しいですが、リストの最後に追加しても問題ありませんが、機能します。最後の行を次のように変更します。

frontLinks.extend(getCurlink)
于 2012-07-10T11:18:57.487 に答える
1

リストを繰り返し処理している間、リストの変更は表示されません。

次のようなものを使用する必要があります。

 while i < len(frontLinks):
     link = frontLinks[i]
     ...
     if condition:
       frontLinks.append(item)
     i += 1
于 2012-07-10T11:17:44.363 に答える
1

反復中にリストに追加できますが、1 つのリストと両端キューを使用します (両端キューの代わりにリストを使用できます。単に に置き換えます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)

このようにして、明確な役割を持つ 2 つのコレクションを常に持つことができます:tododone. プロセス全体を再起動することなく、反復の停止/再開、現在の状態のダンプ/ロードなどを行うことができます。

于 2012-07-10T11:42:45.043 に答える