2011-11-12 66 views
-3

我想將for循環中的a更改爲[4,5,6]。 此代碼只是打印:1,2,3Python:在循環運行時更改循環的參數

a = [1,2,3] 

for i in a: 
    global a 
    a = [4,5,6] 
    print i 

我想要的輸出中1, 4, 5, 6

+5

什麼是真正的用例(而不是玩具問題)? –

+1

隨着新的編輯,它使得比以前更少... –

+0

'a'是一個網站上的鏈接。該計劃去這個網站。然後它會設置新的鏈接(4,5,6)。如果某些條件成立,則選擇該鏈接,並重新開始。 (也許你知道維基百科上的'哲學')。 'a'改變整個時間。 – kame

回答

3

你需要澄清的問題,因爲沒有你如何獲得所需的輸出1,4解釋,5 ,6當你的輸入是[1,2,3]。下面產生所需的輸出,但它是完全的ad-hoc和毫無意義:

i = 0 
a = [1, 2, 3] 
while i < len(a): 
    print(a[i]) 
    if a[i] == 1: 
     a = [4, 5, 6] 
     i = 0   # edit - good catch larsmans 
    else: 
     i += 1 

主要的一點是,雖然循環執行不能修改的參數for循環。從Python文檔:

它是不安全的修改序列上迭代的循環 (這隻能發生於可變序列類型,如列表)。如果 您需要修改正在迭代的列表(例如,至 重複選定的項目),則必須遍歷副本。

編輯:如果根據你試圖走網址的評論,你需要更復雜的邏輯做的不僅僅是對更換一個列表(頂層鏈接)深度優先或廣度優先的步行路程列表(第一頁中的鏈接)。在你的例子中,在潛入第1頁後,你完全失去了第2頁和第3頁的軌跡。

+0

重置列表變量'a'時,您需要重置'i = 0'。否則,+1,因爲這似乎反映了OP的實際問題,在評論中描述。 –

0

的問題是分配

a = [4,5,6] 

只是改變的變量,而不是基本的對象。有多種方式可以解決這個問題。一個是使用while循環一樣

a = [1,2,3] 

i = 0 
while i<len(a): 
    print a[i] 
    a = [4,5,6] 
    i += 1 

打印

1 
5 
6 
+0

你能看到編輯嗎? – kame

0

如果你在代碼中的有用點處打印了id(a),你會明白爲什麼這樣做不起作用。

即使這樣的事情不工作:

a = [1,2,3] 

def change_a(new_val): 
    a = new_val 

for i in a: 
    change_a([4,5,6]) 
    print i 

我不認爲這是可以做到你想要什麼。打破目前的循環,並開始一個新的值與你的新價值。