簡體   English   中英

Python-枚舉索引

[英]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] 您可以嘗試使用內置函數rangexrange (逐個元素生成):

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM