首页 > 其他 > 详细

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

时间:2019-08-30 14:43:11      阅读:107      评论:0      收藏:0      [点我收藏+]
 

方案

方案一:可以使用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

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

原文:https://www.cnblogs.com/valorchang/p/11434600.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!