出现如何在Python中使用itertools

  介绍

如何在Python中使出现用itertools ?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>迭代器

循环器(迭代器)是对象的容器,包含有多个对象。通过调用循环器的下一个()方法(next()方法,在Python 3. x中),循环器将依次返回一个对象。直到所有的对象遍历穷尽,循环器将举出抛出StopIteration错误。

在我的迭代器结构中,循环器每次返回的对象将赋予给我,直到循环结束。使用iter()内置函数,我们可以将诸如表,字典等容器变为循环器。比如

for 小姐:拷贝iter ([2, 4, 5, 6)):   以前,print 我

标准库中出现的itertools包提供了更加灵活的生成循环器的工具。这些工具的输入大都是已有的循环器。另一方面,这些工具完全可以自行使用Python实现,该包只是提供了一种比较标准,高效的实现方式。

#, import 从而工具   得到itertools  import  *

<强>无穷循环器

#,从5开始的整数循环器,每次增加2,即5,7,9,11,13,15,…   数(5,2),,   #,重复序列的元素,既a, b, c, a, b,, c …   周期(& # 39;abc # 39;),   1.2 #,重复,构成无穷循环器,即1.2,,1.2,1.2,……   重复(1.2),,   #,重复也可以有一个次数限制:   重复(10,5),#重复5次10

<强>函数式工具

函数式编程是将函数本身作为处理对象的编程范式。在Python中,函数也是对象,因此可以轻松的进行一些函数式的处理,比如地图()、过滤器(),减少()函出现数。

itertools包含类似的工具。这些函数接收函数作为参数,并将结果返回为一个循环器。

得到itertools  import  *   rlt =, imap(战俘,[1,2,3],,(1,2,3])   for  num  rlt拷贝:   ,打印(num)

上面显示了imap函数。该函数与图()函数功能相似,只不过返回的不是序列,而是一个循环器。包含元素1,4,27日,即1 * * 1,2 * * 2,3 * * 3的结果。函数战俘(内置的乘方函数)作为第一个参数.pow()依次作用于后面两个列表的每个元素,并收集函数结果,组成返回的循环器。

此外,还可以用下面的函数:

<代码> starmap(战俘,[(1,1),(2,2),(3)])

战俘将依次作用于表的每个元组。

ifilter函数与过滤()函数类似,只是返回的是一个循环器。

<代码> ifilter(λx: x比;5(2、3、5、6、7)

将λ函数依次作用于每个元素,如果函数返回真,则收集原来的元素:6、7 .

此外,

<代码> ifilterfalse(λx: x比;5(2、3、5、6、7])

与上面类似,但收集返回错误的元素:2,3,5 .

<代码> takewhile(λx: x & lt;5(1、3、6、7、1])

当函数返回真实时,收集元素到循环器。一旦函数返回假,则停止:1,3 .

dropwhile(λx: x & lt;5 (1、3、6、7、1])

当函数返回假时,跳过元素,一旦函数返回真,则开始收集剩下的所有元素到循环器:6、7日1 .

<强>组合工具

我们可以通过组合原有循环器,来获得新的循环器。

<强>循环器和笛卡尔乘积

#,连接两个循环器成为一个。1,,2,,3,,4,5,7   链([1,2,3],,(4日,5日,7]),   #,多个循环器集合的笛卡尔积,相当于嵌套循环只,   产品(& # 39;abc # 39;,, [1, 2])

样例如下

for  m, n 拷贝产品(& # 39;abc # 39;,, [1, 2]):   ,print  m, n      & # 39;& # 39;& # 39;   a  1   a  2   b  1   b  2   c  1   c  2   & # 39;& # 39;& # 39;

<>强排列与组合

#,从& # 39;abcd # 39;中挑选两个元素,比如ab,公元前,…,将所有结果排序,返回为新的循环器。   排列(& # 39;abc # 39;,, 2)

注意,上面的组合分顺序,即ab,英航都返回。

#从& # 39;abcd # 39;中挑选两个元素,比如ab,公元前,……将所有结果排序,返回为新的循环器。
组合(& # 39;abc # 39; 2)

注意,上面的组合不分顺序,即ab,英航的话,只返回一个ab。

#与上面类似,但允许两次选出的元素重复。即多了aa、bb, cc
combinations_with_replacement (& # 39; abc # 39; 2)

<强> groupby()

将关键函数作用于原循环器的各个元素,根据关键函数结果,将拥有相同函数结果的元素分到一个新的循环器。每个新的循环器以函数返回结果为标签。

这就好像一群人的身高作为循环器。我们可以使用这样一个关键函数:如果身高大于180年返回“高大”;如果身高底于160年返回“短”,中间的返回“中产”。最终,所有身高将分为三个循环器,即“高”,“短”,“中产”。

出现如何在Python中使用itertools