问题12:如何对迭代器做切片操作

问题12:如何对迭代器做切片操作

 

方案

方案一:可以使用readlines()函数,将文件的每行分成一个列表:lines = f.readlines(),在对其进行切片:lines[100 : 300];

#弊端:如果文本文件过大,则可能导致内存不足;

方案二:使用标准库itertools下的islice方法;

功能:islice(可迭代对象, [start, ]stop[, step]):对可迭代对象或迭代器做切片操作,返回一个可迭代的对象;

参数:可迭代对象、起始值、终止值、步进值;

# A、步进值:即每次迭代元素个数,或几行(对文件操作),默认为1;

#B、起始值、终止值:元素序号;即,可指定需要迭代的元素范围;

需求1:对文本文件的其中几行进行迭代操作;

复制代码
from itertools import islice
f = open('文件路径'
for i in islice(f, 100, 300, 2):
  print(i)

# 2)迭代f文件,从开始到第300行,每1行迭代一次;
for i in islice(f, 300):
  print(i)

# 3)迭代f文件,从100行到结尾,每1行爹地啊一次;
for i in islice(f, 100, None):
  print(i)

#文件不支持反向引索,因为在未读完文件时,系统不知道文件结尾;
for i in islice(f, 100, -100):
  print(i)
复制代码

需求2:对序列的迭代器进行迭代操作;

复制代码
form itertools import islice
p = range(20)
t = iter(p)

for x in t:
print(x)
#输出:0 1 2 ... 19

# 对6~10号元素进行迭代
for x in islice(t, 5, 10):
print(x)
#输出:5 6 7 8 9

#A、经过islice迭代后,迭代的元素被消耗,包含0~4,因为0~4也被islice迭代了,只是没被显示出来,islice要求在第6号元素处开始显示;
#B、当再次t进行迭代时,前时号元素不再显示,因为被islice消耗;
for x in t:
print(x)
#输出:10 11 12 13 14 15 16 17 18 19

#islice只会消耗迭代器t的数据,不会消耗原序列;
for x in p:
  print(x)
#输出:0 1 2 ... 19
原文地址:https://www.cnblogs.com/valorchang/p/11434600.html