通常情况下,我会使用itertools
secondline = itertools.islice(input_open, 1, None, 4)
fourthline = itertools.islice(input_open, 3, None, 4)
并执行for line in secondline
或for line in fourthline
分别处理每个第二行或第四行。
有没有办法同时处理每一条第二和第四条线?我想在每个第2行和第4行执行一些文本处理,并在它们之间进行一些数学运算。
UPDATE 我的意思是每第2和第4行:
line0
line1 2nd line
line2
line3 4th line
line4
line5 2nd line
line6
line7 4th line
...
但我想也可以使用enumerate
并对i % 4 == 1
和i % 4 == 3
进行比较来获取它们。我认为更简单
答案 0 :(得分:1)
获得成对“第二”线的一种方法是,“第四”线是仅用islice
获取步骤2
然后zip
获取它自己:
lines = islice(input_file, 1, None, 2)
for second, fourth in zip(lines, lines):
这是有效的,因为zip
首先在第一个参数上调用__next__
方法,它获取“第二”行并前进迭代器,然后移动到第二个参数并调用__next__
再次获得“第四”线并再次推进迭代器。
数字示例:
>>> seq = iter(range(22))
>>> numbers = islice(seq, 1, None, 2)
>>> for num1, num2 in zip(numbers, numbers):
... print(num1, num2)
...
1 3
5 7
9 11
13 15
17 19
# Note: missing number 21!
请注意,如果最后一个“第二”行后面没有“第四”行,因为文件太短,它将不会出现在输出中。
答案 1 :(得分:0)
为什么不:
def 2_and_4(fh):
first = fh.readline()
second = fh.readline()
third = fh.readline()
fourth = fh.readline()
yield second, fourth
让它成为一个发电机