我刚开始学习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
...
答案 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]
。您可以尝试使用内置函数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
和element
之上迭代'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是当前索引