Python - 枚举中的索引

时间:2014-01-26 03:38:26

标签: python

我刚开始学习Python。 python中的什么索引值从for循环开始?

例如,如果我有一个包含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
    ...

6 个答案:

答案 0 :(得分:4)

当你使用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,......

答案 1 :(得分:3)

对于您的第一个问题:索引从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给出右侧打开的半开放区间)

答案 2 :(得分:0)

来自Python Docs

  

Python的 for 语句按照它们在序列中出现的顺序迭代任何序列(列表或字符串)的项目。

所以它会在指定的范围内迭代。获得范围[30, 60, ... 390]。您可以尝试使用内置函数rangexrange(逐个元素生成元素):

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

回答有关索引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将在0, 1, 2element之上迭代'a', 'b', 'c'

答案 3 :(得分:0)

使用上面的示例:

如果打开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次迭代时打印。

答案 4 :(得分:0)

默认情况下,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'就像问“将除以30之后的余数为零?”

答案 5 :(得分:0)

Python有自己的标准库来执行此操作:使用fileinput

#!/usr/bin/python

import fileinput

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

BTW如果你使用枚举,那么索引从0开始,所以当你测试它时你应该测试(n + 1) % 30 == 0#其中n是当前索引