千家信息网

python遍历迭代器自动链式处理数据的代码怎么写

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,python遍历迭代器自动链式处理数据的代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python遍历迭代器自动链式处理数据p
千家信息网最后更新 2026年10月31日python遍历迭代器自动链式处理数据的代码怎么写

python遍历迭代器自动链式处理数据的代码怎么写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

python遍历迭代器自动链式处理数据

pytorch.utils.data可兼容迭代数据训练处理,在dataloader中使用提高训练效率:借助迭代器避免内存溢出不足的现象、借助链式处理使得数据读取利用更高效(可类比操作系统的资源调控)

书接上文,使用迭代器链式处理数据,在Process类的__iter__方法中执行挂载的预处理方法,可以嵌套包裹多层处理方法,类似KoaJs洋葱模型,在for循环时,自动执行预处理方法返回处理后的数据

分析下述示例中输入数据依次执行顺序:travel -> deep -> shuffle -> sort -> batch,实际由于嵌套循环或设置缓存的存在,数据流式会有变化,具体如后图分析

from torch.utils.data import IterableDataset# ...import randomclass Process(IterableDataset):    def __init__(self, data, f):        self.data = data        # 绑定处理函数        self.f = f       def __iter__(self):        # for循环遍历时,返回一个当前环节处理的迭代器对象        return self.f(iter(self.data)) a = ['a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9']b = ['b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9']c = ['c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9']# data = [[j + str(i) for i in range(10)] for j in ['a','b', 'c'] ]data = [a, b, c]def travel(d):    for i in d:        # print('travel ', i)        yield idef deep(d):    for arr in d:        for item in arr:            yield itemdef shuffle(d, sf_size=5):    buf = []    for i in d:        buf.append(i)        if len(buf) >= sf_size:            random.shuffle(buf)            for j in buf:                # print('shuffle', j)                yield j            buf = []    for k in buf:        yield kdef sort(d):    buf = []    for i in d:        buf.append(i)        if len(buf) >= 3:            for i in buf:                # print('sort', i)                yield i            buf = []    for k in buf:        yield kdef batch(d):    buf = []    for i in d:        buf.append(i)        if len(buf) >= 16:            for i in buf:                # print('batch', i)                yield i            buf = []# 对训练数据进行的多个预处理步骤dataset = Process(data, travel)dataset = Process(dataset , deep)dataset = Process(dataset , shuffle)dataset = Process(dataset , sort)train_dataset = Process(p, batch)# 可在此处断点测试for i in p:    print(i, 'train')# train_data_loader = DataLoader(train_dataset,num_workers=args.num_workers,prefetch_factor=args.prefetch)# train(model , train_data_loader)

由上可以构造数据流式方向 :batch(iter(sort(iter(shuffle(iter(deep(iter(travel(iter( d ))))))))))

根据数据流式抽取部分过程画出时序图如下:

附:python 手动遍历迭代器

想遍历一个可迭代对象中的所有元素,但是却不想使用for 循环

为了手动的遍历可迭代对象,使用next() 函数并在代码中捕获StopIteration 异常。比如,下面的例子手动读取一个文件中的所有行

def manual_iter():    with open('/etc/passwd') as f:        try:            while True:                line = next(f)                print(line, end='')        except StopIteration:            pass

通常来讲, StopIteration 用来指示迭代的结尾。然而,如果你手动使用上面演示的next() 函数的话,你还可以通过返回一个指定值来标记结尾,比如None 。下面是示例:

with open('/etc/passwd') as f:    while True:        line = next(f)        if line is None:            break    print(line, end='')

大多数情况下,我们会使用for 循环语句用来遍历一个可迭代对象。但是,偶尔也需要对迭代做更加精确的控制,这时候了解底层迭代机制就显得尤为重要了。下面的交互示例向我们演示了迭代期间所发生的基本细节:

>>> items = [1, 2, 3]>>> # Get the iterator>>> it = iter(items) # Invokes items.__iter__()>>> # Run the iterator>>> next(it) # Invokes it.__next__()1>>> next(it)2>>> next(it)3>>> next(it)Traceback (most recent call last):File "", line 1, in StopIteration>>>

看完上述内容,你们掌握python遍历迭代器自动链式处理数据的代码怎么写的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

迭代 数据 处理 方法 链式 循环 对象 手动 代码 函数 示例 训练 预处理 内容 更多 问题 面的 分析 演示 精确 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 蓝思科技飞鸽互联网 嘟嘟瓜互联网科技 奇酷互联网络科技 融贸通互联网科技 山东吉时兔互联网科技有限公司 济南和联互联网科技有限公司 互联网科技寓意 金融科技与互联网金融相同和不同 智腾互联网科技有限公司 深圳市优智互联网科技有限公司 亳州好赞互联网科技有限公司 互联网在线教育科技创业 长沙茂晟互联网科技有限公司 恒生互联网科技业指数调整周期 云南省自由互联网科技有限公司 互联网风格科技公司名称 东营紫格互联网科技 互联网科技职业技能培训学校 山东蛋芒互联网科技有限公司 博彦科技互联网金融 科技股互联网 迪茉互联网科技 四个字互联网科技公司取名 中正互联网科技招聘 创业天下互联网科技有限公司 宁夏众和广鑫互联网科技有限公司 荆州市昕露互联网络科技有限公司 上海科技产业互联网平台 全球科技与互联网公司市值变化
0