python自带intertool模块找不到_Python itertools模块:生成迭代器(示例分析)

1

itertools 模块中主要包含了一些用于生成迭代器的函数。在 Python 的交互式解释器中先导入 itertools 模块,然后输入 e for e in dir(itertools) if not e.startswith(_) 命令,即可看到该模块所包含的全部属性和函数:cycle(p):对序列 p 生成无限循环 p0, p1,..., p0, p1,... 的迭代器。比如使用 cycle(ABCD) 生成的迭代器包含:A,B,C,D,A,B,C,D,...。

04d7a614f4d0b503f8e60248cc4ec28332bf208e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

2

从上面的输出结果可以看出,itertools 模块中的不少函数都可以用于生成迭代器。先看 itertools 模块中三个生成无限迭代器的函数:count(start, step):生成 start, start+step, start+2*step,... 的迭代器,其中 step 默认为 1。比如使用 count(10) 生成的迭代器包含:10, 11 , 12 , 13, 14,...。repeat(elem ,n):生成无限个 elem 元素重复的迭代器,如果指定了参数 n,则只生成 n 个 elem 元素。比如使用 repeat(10, 3) 生成的法代器包含:10, 10, 10。下面程序示范了使用上面三个函数来生成迭代器:

b955ead0b503c8d277ca03f8498333bf3aef218e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

3

在 itertools 模块中还有一些常用的迭代器函数,如下所示:accumulate(p,func):默认生成根据序列 p 元素累加的迭代器,p0, p0+p1, p0+p1+p2,...序列,如果指定了 func 函数,则用 func 函数来计算下一个元素的值。chain(p, q, ...):将多个序列里的元素“链”在一起生成新的序列。compress(data, selectors):根据 selectors 序列的值对 data 序列的元素进行过滤。如果 selector0 为真,则保留 data0;如果 selector1 为真,则保留 data1......依此类推。dropwhile(pred, seq):使用 pred 函数对 seq 序列进行过滤,从 seq 中第一个使用 pred 函数计算为 False 的元素开始,保留从该元素到序列结束的全部元素。takewhile(pred, seq):该函数和上一个函数恰好相反。使用 pred 函数对 seq 序列进行过滤,从 seq 中第一个使用 pred 函数计算为 False 的元素开始,去掉从该元素到序列结束的全部元素。filterfalse(pred, seq):使用 pred 函数对 seq 序列进行过滤,保留 seq 中使用 pred 计算为 True 的元素。比如 filterfalse(lambda x:x%2, range(10)),得到 0, 2, 4, 6, 8。islice(seq, start, stop , step):其功能类似于序列的 slice 方法,实际上就是返回 seqstart:stop:step 的结果。starmap(func, seq):使用 func 对 seq 序列的每个元素进行计算,将计算结果作为新的序列元素。当使用 func 计算序列元素时,支持序列解包。比如 seq 序列的元素长度为 3,那么 func 可以是一个接收三个参数的函数,该函数将会根据这三个参数来计算新序列的元素。zip_longest(p,q,...):将 p、q 等序列中的元素按索引合并成元组,这些元组将作为新序列的元素。上面这些函数的测试程序如下:

47bf594ec28333bf0edb71f9dbb8b43ea9db1d8e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

4

运行上面程序,可以看到如下输出结果:

c3c22dbf3bef354f678cf08823db574afb321b8e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

5

在 itertools 模块中还有一些用于生成排列组合的工具函数:product(p, q, ...repeat= 1):用序列 p 、q 、... 中的元素进行排列组合,就相当于使用嵌套循环组合。permutations(p, r):从序列 p 中取出 r 个元素组成全排列,将排列得到的元组作为新迭代器的元素。combinations(p, r):从序列 p 中取出 r 个元素组成全组合,元素不允许重复,将组合得到的元组作为新迭代器的元素。combinations with_replacement(p, r),从序列 p 中取出 r 个元素组成全组合,元素允许重复,将组合得到的元组作为新迭代器的元素。如下程序示范了上面 4 个函数的用法:

edd84743040148fe507619dd8fd149299b88028e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

6

上面程序用到了一个字符串的 join() 方法,该方法用于将元组的所有元素连接成一个字符串。运行程序,可以看到如下输出结果:

054056fe1e425d6b54e50d9f11883913e9e5008e.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1

END

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值