加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Python循环12种超强写法,又快又省内存

发布时间:2019-11-13 20:03:38 所属栏目:建站 来源:zglg
导读:0 媒介 说处处理赏罚轮回,我们风俗行使for, while等,好比依次打印每个列表中的字符: 在打印内容字节数较小时,所有载入内存后,再打印,没有题目。然则,假云云刻有成千上百万条车辆行驶轨迹,叫你说明出个中每个客户的出行纪律,堵车环境等,若是是在单机
副问题[/!--empirenews.page--]

Python轮回12种超强写法,又快又省内存

0 媒介

说处处理赏罚轮回,我们风俗行使for, while等,好比依次打印每个列表中的字符:

Python轮回12种超强写法,又快又省内存

在打印内容字节数较小时,所有载入内存后,再打印,没有题目。然则,假云云刻有成千上百万条车辆行驶轨迹,叫你说明出个中每个客户的出行纪律,堵车环境等,若是是在单机上处理赏罚这件事。

你也许起主要面对,也也许被你忽视,最儿女码都写好后,才也许袒暴露的一个题目:outofmemory, 这在现实项目中常常碰着。

这个题目提示我们,处理赏罚数据时,怎样写出高效操作内存的措施,就显得很重要。本日,我们就来切磋怎样高效操作内存,节减内存同时还能把工作办妥。

着实,Python已经筹备好一个模块专门用来处理赏罚这件事,它就是itertools 模块,这内里几个函数的成果着实很好领略。

我不规划笼统的先容它们所能实现的成果,而是想说明这些成果背后的实当代码,它们怎样做到高效节减内存的,Python内核的孝顺者们又是怎样写出一手大度的代码的,这很风趣,不是吗?

OK,let's go. Hope you enjoy the journey!

1 拼接元素

itertools 中的chain 函数实现元素拼接,原型如下,参数*暗示个数可变的参数

chain(iterables)

应用如下:

Python轮回12种超强写法,又快又省内存

哇,不能再好用了,它有点join的味道,可是比join强,它的重点在于参数都是可迭代的实例。

那么,chain怎样实现高效节减内存的呢?chain或许的实当代码如下:

Python轮回12种超强写法,又快又省内存

以上代码不难领略,chain本质返回一个天生器,以是它现实上是一次读入一个元素到内存,以是做到最高效地节减内存。

2 逐个累积

返回列表的累积汇总值,原型:

accumulate(iterable[, func, *, initial=None])

应用如下:

Python轮回12种超强写法,又快又省内存

accumulate或许的实当代码如下:

Python轮回12种超强写法,又快又省内存

以上代码,你还好吗?与chain简朴的yield差异,此处轻微伟大一点,yield有点像return,以是 yield total那行直接就返回一个元素,也就是iterable的第一个元素,由于任何时辰这个函数返回的第一个元素就是它的第一个。又由于yield返回的是一个generator工具,好比名字gen,以是next(gen)时,代码将会执行到 for element in it:这行,而此时的迭代器it 已经指到iterable的第二个元素,OK,信托你懂了!

3 漏斗筛选

它是compress 函数,成果相同于漏斗成果,以是我称它为漏斗筛选,原型:

compress(data, selectors)

Python轮回12种超强写法,又快又省内存

轻易看出,compress返回的元素个数便是两个参数中较短的列表长度。

它的或许实当代码:

Python轮回12种超强写法,又快又省内存

这个函数很是好用

4 段位筛选

扫描列表,不满意前提处开始今后保存,原型如下:

dropwhile(predicate, iterable)

应用例子:

Python轮回12种超强写法,又快又省内存

实现它的或许代码如下:

Python轮回12种超强写法,又快又省内存

5 段位筛选2

扫描列表,只要满意前提就从可迭代工具中返回元素,直到不满意前提为止,原型如下:

takewhile(predicate, iterable)

应用例子:

Python轮回12种超强写法,又快又省内存

实现它的或许代码如下:

6 次品筛选

扫描列表,只要不满意前提都保存,原型如下:

dropwhile(predicate, iterable)

应用例子:

Python轮回12种超强写法,又快又省内存

实现它的或许代码如下:

Python轮回12种超强写法,又快又省内存

7 切片筛选

Python中的平凡切片操纵,好比:

Python轮回12种超强写法,又快又省内存

它们的缺陷照旧lis 必需所有载入内存,以是更节减内存的操纵islice,原型如下:

islice(iterable, start, stop[, step])

应用例子:

Python轮回12种超强写法,又快又省内存

实现它的或许代码如下:

Python轮回12种超强写法,又快又省内存

奇妙操作天生器迭代竣事时会抛出非常StopIteration,做一些界线处理赏罚的工作。

8 细胞破碎

tee函数相同于我们熟知的细胞破碎,它能复制原迭代器n个,原型如下:

tee(iterable, n=2)

应用如下,可以看出复制出的两个迭代器是独立的

Python轮回12种超强写法,又快又省内存

实现它的代码或许如下:

Python轮回12种超强写法,又快又省内存

tee 实现内部行使一个行列范例deques,早天赋生空行列,向复制出来的每个行列中添加元素newval, 同时yield 当前被挪用的mydeque中的最左元素。

9 map变体

starmap可以看做是map的变体,它能越发节减内存,同时iterable的元素必需也为可迭代工具,原型如下:

starmap(function, iterable)

应用它:

Python轮回12种超强写法,又快又省内存

starmap的实现细节如下:

Python轮回12种超强写法,又快又省内存

10 复制元素

repeat实现复制元素n次,原型如下:

repeat(object[, times])

应用如下:

Python轮回12种超强写法,又快又省内存

它的实现细节或许如下:

Python轮回12种超强写法,又快又省内存

11 笛卡尔积

笛卡尔积实现的结果同下:

Python轮回12种超强写法,又快又省内存

以是,笛卡尔积的实现结果如下:

Python轮回12种超强写法,又快又省内存

它的实现细节:

Python轮回12种超强写法,又快又省内存

12 增强版zip

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读