2013-08-26 23 views
1

這裏是我運行代碼:意外的next()在python行爲,線出現跳過

with open('test.txt','r') as fin: 
    for i,line in enumerate(fin): 
     print i 
     print fin.next() 

在哪裏 '的test.txt' 是:

5 
    9 6 
    4 6 8 
    0 7 1 5 

我輸出得到是:

0 
9 6 

1 
0 7 1 5 

我很困惑,爲什麼'4 6 8'行被跳過。我預計第一次迭代打印第二行,第二次迭代打印第三行,第三次迭代打印第四行。

相反,我正在第二次迭代的第4行。

+0

你可以請張貼你的實際代碼,正確的縮進和冒號嗎?很難判斷你是否想要每次通過循環發生'fin.next()',或者最後一次...... – abarnert

回答

4

這是因爲當你做for i,line in enumerate(fin)時,撥打enumerate的電話已經打電話給fin.next()了。因此,稍後手動調用fin.next時,會在您正在處理的行後面出現下一行。這就是爲什麼你似乎跳過線。

如果你想看到更多的這種行爲,看看通過下面的代碼片段產生的輸出:

L1 = [1,2,3,4] 
L2 = ['a', 'b', 'c', 'd'] 
print zip(L1, L2) 

輸出是:

[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')] 

相比之下,與下面的代碼段:

with open('test.txt','r') as fin: 
    print zip(fin, fin) 

當輸出爲:

[('1 2 3 4\n' , 'a b c d \n')] 

你現在明白了爲什麼你的輸出看起來像跳過了行嗎?

+0

你應該包含你的例子的輸出,閱讀它的人並不總是有可能試試看。 :) – flornquake

+0

@flornquake:通常情況下,我會,但我現在不在碼頭。我會很感激,如果你是,可以,雖然 – inspectorG4dget

+0

@flornquake:我注意到你的建議編輯被拒絕。對不起,[我試過](http://meta.stackexchange.com/q/194722/190564) – inspectorG4dget

3

fin.next()是迭代fin文件對象,將光標移動到下一行,所以當你回到while循環的頂部,你已經「跳過」的路線。您要打印line,而不是fin.next()