l = [1,2,3,4,5]
# l.revers() # l = [5,4,3,2,1] 改变了原列表
# l[::-1] # 得到新列表
reversed(l) # 得到列表的反向迭代器,实际调用 l.__reversed__
iter(l) # 得到列表的正向迭代器,实际调用 l.__iter__
for x in reversed(l):
print x
#
class FloatRage:
# 定义构造器
def __init__(self,start,end,step=0.1):
self.start = start
self.end = end
self.step = step
def __iter__(self):
t = self.start
while t <= self.end:
yield t
t += self.step
def __reversed__(self):
t = self.end
while t >= self.start:
yield t
t -= self.step
for x in reversed(FloatRange(1.0,4.0,0.5)):
print x
对迭代器切片
cat -n /var/log/dmsg # linux kernel文件
f = open('/var/log/dmsg')
f[100:300] # 报错,文件对象不能直接切片
lines = f.readlines()
lines[100:300] # 一次性读入进内存,若文件过大,容易内存不足
f.seek(0) # 指针返回头部
for line in f :
print line
# 使用标准库中的itertools.islice,返回一个迭代对象切片的生成器
from itertools import islice
islice(f,100,300)
for line in islice(f,100,300):
print line
islice(f,500)# 前500行
islice(f,100,None)# 第100行到最后
islice(f,100,-100)# 报错,读完之前,无法得知一共多少行
l = range(20)
t = iter(l)
for x in islice(t,5,10):
print x # 5,6,7,8,9
for x in t:
pirnt x # 10,11,12..20
每次使用islice需重新申请迭代对象,会消耗原来的对象
2.3【迭代器与生成器】python反向迭代及迭代器的切片操作
于 2023-04-10 11:07:06 首次发布