[英]Python - index in enumerate
我才剛剛開始學習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
...
當您使用帶有列表的for循環時。 它包括列表中從第零個開始的所有元素:如果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
# ...
這比測試range
成員資格稍好,因為您不必擔心邊緣效應(即, range
提供了一個在右端打開的半開間隔)。
從Python Docs :
Python的
for
語句按照它們在序列中出現的順序遍歷任何序列(列表或字符串)的項目。
因此它將在指定范圍內迭代。 得到范圍[30, 60, ... 390]
。 您可以嘗試使用內置函數range
或xrange
(逐個元素生成):
for i in range(30, 390 + 1, 30): # range(start, end, step)
print i
回答有關索引從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
將遍歷0, 1, 2
並遍歷'a', 'b', 'c'
element
。
使用上面的示例:
如果您打開python shell並輸入以下命令:
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次迭代中打印。
默認情況下,enumerate()從0開始。如果要從1開始,請向其傳遞要從其開始的第二個參數:
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)運算符,則'i%30 == 0'就像在問“將i除以30后的余數是否為零?”
Python有其自己的std lib:使用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是當前索引
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.