islice
切片
1 | >>> def count(n): |
1 | In [97]: ls = [0,1,2,3,4,5,6,7,8,9] |
dropwhile
抛弃符合函数的值,但是实际测试跟我所理解的有所出入
如下代码本来期望去掉b开头的,结果却全部输出了
1 | In [105]: for i in itertools.dropwhile(lambda item : item.startswith('b'), ls): |
再试,去掉小于4的
怪哉了,换成数字却又可以了
1 | In [106]: ls = [1,2,3,4,5,6,7,8] |
再试,条件一样还是去掉大于5的,改变列表值
这次又不是我所期望的
但是好像有点眉目了,第一个item不满足条件就直接输出全部了
我们是不是可以假设该函数抛弃前面满足条件的值,直到出现不满足的值后就不再判断,即使在这个值后可能还会出现满足条件的值也不再抛弃
1 | In [108]: ls = [6,3,8,9,1,5,4,2] |
二话不说,赶紧验证一下
1 | In [110]: ls = [1,2,3,4,6,3,8,9,1,5,4,2] |
果然如此
permutations
排列(与顺序有关)
1 | In [112]: items = ['a', 'b', 'c'] |
combinations
组合(与顺序无关)
1 | In [112]: items = ['a', 'b', 'c'] |
combinations_with_replacement
元素可重复出现的组合
1 | In [119]: items = ['a', 'b'] |
zip_longest
功能与内置函数zip类似,只是输出以最长的序列为准
1 | In [45]: import itertools |
chain
1 | In [49]: import itertools |