python-itertools模块

前言

模块itertools提供用于操作迭代对象的函数,官网标准库文档链接: link.

itertools提供的3个“无限”迭代器

  1. count():count(10) --> 10 11 12 13 14 …
import itertools
#def count(start=0, step=1)默认参数
nums=itertools.count(0,1)#count返回的是一个无限迭代的数字队列,输出要遍历
for i in nums:
    print(i)#会无限打印,需要手动停止运行
  1. cycle():cycle(‘ABCD’) --> A B C D A B C D …
#def cycle(iterable)#把传入的一个序列无限重复下去
letters=itertools.cycle('xiaoxiannv')#字符串也是序列的一种
for letter in letters:
    print(letter)
  1. repeat():repeat(10, 3) --> 10 10 10
#def repeat(object, times=None)把一个元素无限重复下去,如果提供第二个参数就可以限定重复次数
nms=itertools.repeat('hello',2)
for i in nms:
    print(i)

PS:无限序列只有在for迭代时才会无限地迭代下去,如果只是创建了一个迭代对象,它不会事先把无限个元素生成,事实上也不可能在内存中创建无限多个元素。

itertools提供多个迭代器操作函数

无限序列虽然可以无限迭代下去,但可以通过itertools提供的的迭代器操作函数进行计算,截取,拼接,筛选等操作:

  1. accumulate()制作一个迭代器,返回其他二进制函数的累积结果(通过可选func参数指定)。
#def accumulate(iterable, func=operator.add, *, initial=None)
nums_sum=itertools.accumulate([1,2,3,4,5])
for i in nums_sum:
    print(i)
nums_initial=itertools.accumulate([1,2,3,4,5],initial=100)
for i in nums_initial:
    print(i)
nums_operator=itertools.accumulate([1,2,3,4,5],operator.mul)
for i in nums_operator:
    print(i)
nums_min=itertools.accumulate([1,2,3,4,5],min)
for i in nums_min:
    print(i)
    # accumulate([1,2,3,4,5]) --> 1 3 6 10 15
    # accumulate([1,2,3,4,5], initial=100) --> 100 101 103 106 110 115
    # accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
    #accumulate([1,2,3,4,5],min)  --> 1 1 1 1 1
  1. chain()可以把一组迭代对象串联起来,形成一个更大的迭代器。
#def chain(*iterables)
    # chain('ABC', '123') --> A B C 1 2 3
letters=itertools.chain('AHDB','21ygywd2')
for i in letters:
    print(i)
  1. 以下这些还没用到过,作为扩展先捋一下:
函数描述例子
compress()选择器compress(‘ABCDEF’, [1,0,1,0,1,1]) --> A C E F
dropwhile()跳过可迭代对象的开始部分dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
filterfalse()/filter()过滤器,返回符合要求的值/过滤掉符合要求的值filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8
groupby()根据表本身的某一列或多列内容进行分组聚合参考下方代码块
islice()切片算法类似[start:end:step]islice(‘ABCDEFG’, 2, None) --> C D E F G
starmap()选择器compress(‘ABCDEF’, [1,0,1,0,1,1]) --> A C E F
takewhile()选择器compress(‘ABCDEF’, [1,0,1,0,1,1]) --> A C E F
tee()选择器compress(‘ABCDEF’, [1,0,1,0,1,1]) --> A C E F
zip_longest()选择器compress(‘ABCDEF’, [1,0,1,0,1,1]) --> A C E F
#islice(iterable, start,end,step)用法对比[start:end:step]
flat = ['2', '3', '5', '7', '11', '13', '17', '19',
 '23', '29', '31', '37', '41', '43', '47', '53',
 '59', '61', '67', '71']
print(type(flat))
print(flat[0::2])#-->['2', '5', '11', '17', '23', '31', '41', '47', '59', '67']
print(flat[1::2])#-->['3', '7', '13', '19', '29', '37', '43', '53', '61', '71']
print(list(zip(flat[0::2], flat[1::2])))#-->[('2', '3'), ('5', '7'), ('11', '13'), ('17', '19'), ('23', '29'), ('31', '37'), ('41', '43'), ('47', '53'), ('59', '61'), ('67', '71')]
flat_iter_1 = iter(flat)
flat_iter_2 = iter(flat)
nums=zip(
    itertools.islice(flat_iter_1, 0, None, 2),
    itertools.islice(flat_iter_2, 1, None, 2)
)
print(list(nums))#-->[('2', '3'), ('5', '7'), ('11', '13'), ('17', '19'), ('23', '29'), ('31', '37'), ('41', '43'), ('47', '53'), ('59', '61'), ('67', '71')]

未完待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值