本帖最后由 paypojie 于 2022-10-21 19:35 编辑
itertools模块的笔记
[Python] 纯文本查看 复制代码 # python的itertools模块提供了非常有用的用于操作迭代对象的函数
# 比方说其中的count()函数
import itertools
i = itertools.count() # 可以传入参数 也可以不传 默认是从零开始 提供了参数就从提供的参数开始
for n in i:
print(n) # 需要使用for循环 才能不断生成新元素 for循环遍历i这个无限迭代器(也可以称为无限迭代对象)
# 可以按Ctrl+c给终止
[Python] 纯文本查看 复制代码 # cycle()函数
c = itertools.cycle('AB') # 传入一个序列 字符串也是序列 cycle()函数可以将一个序列给无限重复下去
for s in c:
print(s) # 同样输出无法停下来
[Python] 纯文本查看 复制代码 # repeat()函数
r = itertools.repeat(0) # repeat()函数将一个元素给无限重复下去
for b in r:
print(b)
[Python] 纯文本查看 复制代码 r = itertools.repeat(0,5) # 还可以传入一个可选参数用来限定重复次数
for b in r:
print(b)
[Python] 纯文本查看 复制代码 # 虽然无限序列可以无限迭代 但是 我们通常会通过takewall()等函数根据条件来截取有限的序列
ct = itertools.count(1)
tw = itertools.takewhile(lambda x: x <= 100, ct)
for d in tw:
print(d)
[Python] 纯文本查看 复制代码 # 上面的是迭代器函数 下面介绍一下迭代器操作函数
ca = itertools.chain('a1','b2') # chain()函数可以将传入的字符串序列给连接成一个更长的字符串序列
for c1 in ca: # 按照廖雪峰的官方网站说法 应该是 chain函数可以将两个迭代对象串联成一个更大的迭代对象
print(c1)
gp = itertools.groupby('AAAABBBCCCEE')
for key,group in gp:
print(key,list(group)) # groupby()函数将迭代对象中相邻的重复元素给挑选出来放一起 在这里要用list(group) 要不然得到的是一串内存地址 而非值
[Python] 纯文本查看 复制代码 # 这一段引用原文 实际上挑选规则是通过函数完成的,只要作用于函数的两个元素返回的值相等,这两个元素就被认为是在一组的,而函数返回值作为组的key。
# 如果我们要忽略大小写分组,就可以让元素'A'和'a'都返回相同的key:
for key,group in itertools.groupby('AAAVVBBNNN',lambda c: c.upper()):
print(key,list(group))
|