美文网首页
py3笔记41:itertools

py3笔记41:itertools

作者: _百草_ | 来源:发表于2023-06-07 17:04 被阅读0次

1、模块导入

import itertools
内置模块,主要用于创建迭代器。返回iterator
import itertools as it # 模块重命名
from itertools import permutations,product # 常见导入


2、无限迭代器

2.1 count(start=0,step=1)

创建一个能生成均匀分布序列或等差数列的迭代器
start指起点,step指步长,不限于浮点数
注意:count()生成的是无限序列迭代器,所以用于循环中,需要额外添加终止条件

k=0 # 用于计数,以控制循环
for item in itertools.count(1,1.2):
    k+=1
    if k==10:break
    print("k={0},item={1:.1f}".format(k,item))
    # .nf 保留小数点后n位的浮点数

# 输出
k=1,item=1
k=2,item=2.2
k=3,item=3.4000000000000004
k=4,item=4.6000000000000005
k=5,item=5.800000000000001
k=6,item=7.000000000000001
k=7,item=8.200000000000001
k=8,item=9.4
k=9,item=10.6

若步长是浮点数时,改为start+step*i for i in count() 可以获取更好的精度

  • 优化
for k in itertools.count():
    item=1+1.2*k
    if k==10:break
    print("k=%d,item=%f"%(k,item))
"""
k=0,item=1.000000
k=1,item=2.200000
k=2,item=3.400000
k=3,item=4.600000
k=4,item=5.800000
k=5,item=7.000000
k=6,item=8.200000
k=7,item=9.400000
k=8,item=10.600000
k=9,item=11.800000

2.2 cycle(iterable)

创建一个迭代器,从一个iterable中循环取元素并输出
注意:迭代器会将输入的iterable取出元素存储一份copy,在第一遍遍历完iterable后,是从copy中循环取出元素并输出,所以需要一份额外的存储空间

k=0
for item in itertools.cycle("ABCDEF"):
    print("k={0},item={1}".format(k,item))
    k+=1
    if k==10:break
"""
k=0,item=A
k=1,item=B
k=2,item=C
k=3,item=D
k=4,item=E
k=5,item=F
k=6,item=A
k=7,item=B
k=8,item=C
k=9,item=D
"""

2.3 repeat(onject[,times])

创建迭代器,重复输出object,如果未指定times会无限输出。若指定times则指定输出次数

for item in itertools.repeat("不要回答!",3):
    print("{0}".format(item))
"""
不要回答!
不要回答!
不要回答!
"""
  • 经典用法:用于map或zip提供一个常数值串
# print(list(map(pow,range(10))))  # 报错
print(list(map(pow,range(10),itertools.repeat(2))))
"""
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
"""

3、终止于最短序列的迭代器

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

生成能够返回输入iterable参数的部分和的迭代器

print(list(itertools.accumulate([1,2,3,4,5])))
"""
# 输出 [1, 3, 6, 10, 15]
缺省情况下,默认求和运算,即列表滚动和
"""
# func指定运算,但必须时二元数值运算符
import operator
# operator.mul(a,b) # a*b
print(list(itertools.accumulate([1,2,3,4,5],operator.mul)))
"""
# 输出 [1, 2, 6, 24, 120]  即迭代相乘
"""

initial指定初始值的话,第一个输出是由initial指定,所以输出比输入元素多一个

print(list(itertools.accumulate([1,2,3,4,5],operator.mul,initial=10)))
"""
# 输出 [10, 10, 20, 60, 240, 1200]
"""

3.2 chain(*iterables)

创建一个迭代器,接受多个iterables参数,将它们串接起来,然后遍历

print(list(itertools.chain("ABCD",["1","2","3"],{"name":"baicao"})))
"""
# 输出 ['A', 'B', 'C', 'D', '1', '2', '3', 'name']
"""

3.3 chain.from_iterable(iterable)

# 类方法
print(list(itertools.chain.from_iterable(["bai","cao","name"])))
"""
# 输出 ['b', 'a', 'i', 'c', 'a', 'o', 'n', 'a', 'm', 'e']
即迭代对象的单一元素若仍是迭代对象,则仍逐一遍历
"""

3.4 compress(data,selectors)

根据selectors所列的各元素对原数据进行过滤处理,挑出对应的selectors元素为Truedata元素
selectorsdata的元素是一一对应的

print(list(itertools.compress("ABCDEFG",[0,0,1,1,0,1,0])))
"""
输出  ['C', 'D', 'F'] ,即只有selectors参数中1所对应的data的元素才能被选中输出
"""

dataselectors长度不相等,则以较短的元素进行遍历

print(list(itertools.compress("ABCDEFG",[0,0,1,1,0])))  # ['C', 'D']
print(list(itertools.compress("ABCDEFG",[0,0,1,1,0,1,0,1,0])))  # ['C', 'D', 'F']

3.5 dropwhile()

print(list(itertools.dropwhile("ABCDEF")))
# Drop items from the iterable while predicate(item) is true.
# Afterwards, return every element until the iterable is exhausted.

1、https://blog.csdn.net/qaqlalala/article/details/122882618
2、https://zhuanlan.zhihu.com/p/478079775
3、https://blog.csdn.net/xcntime/article/details/115675908
4、python chain.from_iterable()

相关文章

  • itertools库中部分源码剖析

    itertools.accumulate(iterable[, func ]) 源码 例子: itertools....

  • python中itertools.islice的用法

    itertools.islice的基本用法为:itertools.islice(iterable, start, ...

  • python 常用内建模块之itertools

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 itertools Python的内建模块ite...

  • Python模块---itertools操作迭代对象

    itertools操作迭代对象 count()无限迭代器 itertools.count(start=0, ste...

  • Python itertools

    Python itertools

  • python实用函数整理

    1、小数的保留 2、排列组合 package itertools itertools具体介绍(含源代码):http...

  • itertools

    counter() cycle() repeat() takewhile() chain() groupby() ...

  • itertools

    Python的内建模块itertools提供了非常有用的用于操作迭代对象的函数。 首先,我们看看itertools...

  • itertools

    python 模块itertools 提供了非常有用的用于操作迭代对象的函数。 首先,我们看看itertools...

  • itertools

    itertools模块提供的全部是处理迭代功能的函数,它们的返回值不是list,而是迭代对象,只有用for循环迭代...

网友评论

      本文标题:py3笔记41:itertools

      本文链接:https://www.haomeiwen.com/subject/tgohedtx.html