Python:如何对迭代器做切片操作
方案:
方案一:可以使用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
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决