千家信息网

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安全错误 数据库的锁怎样保障安全 互联网科技卖菜 合肥互联网科技公司 远拓互联网科技 狮子座互联网科技有限公司 广西互联网科技公司 互联网高科技企业 人人互联网科技是培训 中国互联网金融科技基金 深圳前海聚择互联网科技有限公司 彤创互联网科技有限公司 辽宁互联网新科技 互联网媒体平台算高科技产业 互联网企业科技类企业如何做账 上海互联网科技公司ppt 珠海东科互联网科技有限公司 互联网科技新闻 西安左小互联网科技有限公司 三亚科技创新互联网基地 杭州科技互联网公司有哪些 如何强化互联网金融科技 互联网科技图片 厦门中拓互联网络科技有限公司 长亮科技互联网金融 安控科技rtu产品工业互联网 互联网教育科技公司vipkid 荆州市昕露互联网络科技有限公司 互联网科技大奖都有哪些公司 广州百诚互联网科技有限公司官网 互联网科技股为什么大涨 银川新华互联网科技学校原画
0