2014-01-26 72 views
0

我剛開始學習Python。在Python中,什麼索引值從for循環開始?Python - 枚舉中的索引

例如,如果我有390行的文本文件,然後我重複:

for i, word in enumerate(f)

01是否索引開始的價值? 另外,如果我想在文件中打印每30行,那麼我是否必須這樣迭代?

if i+1 in [30,60,90,120,150,180,210,240,270,300,330,360,390]: 
    print i 
    ... 
+6

這些事情最好通過嘗試瞭解。 – unutbu

+0

我確實嘗試過。但是,對於像我這樣的新程序員來說,這是沒有意義的。 Python是從C/CUDA非常不同,我正在慢慢學習:) – Eagle

回答

2

當您使用循環列表。它包括從第零啓動列表中的所有元素: 如果f=['x','y','z']

for i, word in enumerate(f): 
    print i, word 

將輸出:

0 x 
1 y 
2 z 

打印每30日線。您可以使用

for i in range(0,390,30): 

這將輸出:0,30,60 90,...

2

關於第一個問題:該指數開始於0,因爲一般是在Python的情況。 (當然,這將是非常容易嘗試自己並看到)。

>>> x = ['a', 'b', 'c'] 
>>> for i, word in enumerate(x): 
    print i, word 


0 a 
1 b 
2 c 

對於你的第二個問題:一個更好的方法來處理打印每30日線是使用mod運算符%

if i+1 % 30 == 0: 
    print i 
    # ... 

這是從1995年起,你在range測試入會唐略勝一籌不必擔心邊緣效應(即因爲range提供了在右端打開的半開區間)。

0

Python Docs

Python的for任意序列(列表或字符串)的項目迭代陳述的順序,它們出現的順序排列。

所以它會在指定的範圍內迭代。獲取範圍[30, 60, ... 390]。您可以嘗試使用內置的功能rangexrange(其由元素會產生元素):

for i in range(30, 390 + 1, 30): # range(start, end, step) 
    print i 

回答有關wheter從01指數開始,嘗試打印tuple(enumerate(['a','b','c']))的問題。它看起來像:

print tuple(enumerate(['a', 'b', 'c'])) 
>>> ((0, 'a'), (1, 'b'), (2, 'c')) 

所以當你

for i, element in enumerate(['a', 'b', 'c']): 

i將遍歷'a', 'b', 'c'超過0, 1, 2element

0

使用你上面的例子:

如果你打開你的Python外殼並鍵入此:

for i, word in enumerate(f): 
    print i, word 

你看到的輸出將是:

0 30 
1 60 
2 90 
3 120 
4 150 
5 180 
6 210 
7 240 
8 270 
9 300 
10 330 
11 360 
12 390 

因此,要回答你的問題,它從索引0開始。 至於第二個問題,可以使用readlines()方法並在每30次迭代時打印一次。

0

默認情況下,枚舉()從0開始。如果你想在一個開始,通過它在要啓動第二個參數:

for i, line in enumerate(f, 1): 
    print i, line 

如果你想打印每30日線,這是一個簡單的方法來做到這一點。

for i, line in enumerate(f): 
    if (i+1) % 30 == 0: 
     print line 

如果你不知道「%」(MOD)運算符,「我30%== 0」,好像叫「是我除以30後的餘數爲零?」

+0

這不會是正確的,第30元素索引29對嗎? –

+0

@yopy:thx,我現在糾正了這一點。 – jdhildeb

0

Python有自己的標準庫做到這一點:使用fileinput

#!/usr/bin/python 

import fileinput 

for line in fileinput.input("txt.txt"): 
    if fileinput.lineno() % 30 == 0: 
     print fileinput.lineno(), line, 

順便說一句,如果你使用的是枚舉,然後從索引0開始,所以當你測試它,你應該測試(n + 1) % 30 == 0#n是目前的指數