我剛開始學習Python。在Python中,什麼索引值從for
循環開始?Python - 枚舉中的索引
例如,如果我有390行的文本文件,然後我重複:
for i, word in enumerate(f)
從0
或1
是否索引開始的價值? 另外,如果我想在文件中打印每30行,那麼我是否必須這樣迭代?
if i+1 in [30,60,90,120,150,180,210,240,270,300,330,360,390]:
print i
...
我剛開始學習Python。在Python中,什麼索引值從for
循環開始?Python - 枚舉中的索引
例如,如果我有390行的文本文件,然後我重複:
for i, word in enumerate(f)
從0
或1
是否索引開始的價值? 另外,如果我想在文件中打印每30行,那麼我是否必須這樣迭代?
if i+1 in [30,60,90,120,150,180,210,240,270,300,330,360,390]:
print i
...
當您使用循環列表。它包括從第零啓動列表中的所有元素: 如果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,...
關於第一個問題:該指數開始於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
提供了在右端打開的半開區間)。
Python的
for
任意序列(列表或字符串)的項目迭代陳述的順序,它們出現的順序排列。
所以它會在指定的範圍內迭代。獲取範圍[30, 60, ... 390]
。您可以嘗試使用內置的功能range
或xrange
(其由元素會產生元素):
for i in range(30, 390 + 1, 30): # range(start, end, step)
print i
回答有關wheter從0
或1
的指數開始,嘗試打印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, 2
和element
。
使用你上面的例子:
如果你打開你的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開始。如果你想在一個開始,通過它在要啓動第二個參數:
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後的餘數爲零?」
這不會是正確的,第30元素索引29對嗎? –
@yopy:thx,我現在糾正了這一點。 – jdhildeb
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是目前的指數
這些事情最好通過嘗試瞭解。 – unutbu
我確實嘗試過。但是,對於像我這樣的新程序員來說,這是沒有意義的。 Python是從C/CUDA非常不同,我正在慢慢學習:) – Eagle