2013-06-11 148 views
1

我有一個簡單的for循環中一個Python腳本:for循環n次迭代的Python

for filename in filenames: 
    outline= getinfo(filename) 
    outfile.write(outline) 

for循環是從HTML頁面中提取數據的較大腳本的一部分。我擁有將近6GB的html頁面,並且在我嘗試使用它們之前,希望進行一些測試運行。

我已搜查,但不能找到一種方法,使後n次迭代我對於迴路斷線(可以說100)

+0

使用計數器,打破如果計數器等於100. – squiguy

回答

4

保留一個計數器爲您的循環。當你的計數器達到100,打破

counter = 0 
for filename in filenames: 
    if counter == 100: 
     break 
    outline= getinfo(filename) 
    outfile.write(outline) 
    counter += 1 
+6

保留計數器的首選方法是在枚舉(文件名)'中爲(for,counter,filename)做'。 – kqr

10
for filename in filenames[:100]: 
    outline= getinfo(filename) 
    outfile.write(outline) 

名單切片filenames[:100]將截斷文件名只是第100個元素的列表。

+2

對於一般的迭代器(不一定是列表):'對於itertools.islice(文件名,100)中的文件名:'。 – chepner

+0

@chepner在Python 3中也有必要嗎? – kqr

+0

是;你不能在任意迭代器中使用slice語法。 – chepner

1

我喜歡@ kqr的回答,而只是另一種方法來考慮,而不是採取第一個100,你可以採取隨機n許多代替:

from random import sample 
for filename in sample(filenames, 10): 
    # pass 
+0

我認爲這是更好的解決方案,只要它沒有任何可怕的性能問題。 – kqr

+0

@kqr我會擔心的主要問題是重現能力....所以,也許妥協是取代1,而不是在你的答案中顯示的切片可以很好地完成......並且仍然更多對測試有用... –

+0

是的,這也是我的想法,但因爲它可能具有與隨機抽樣類似的性能而被丟棄。我沒有考慮可測試性,但你確實是對的。 – kqr