名称 | 解释 |
---|---|
count - (start=0, step=1) | 创建一个可以无限迭代的迭代器, 支持设置起始位置和步长 |
cycle - (iterable) | 创建一个可以无限迭代的迭代器, 将参数无限循环生成 |
repeat - (object, num) | 将参数1, 按照指定的参数2, 生成一个迭代器 |
chain - (*iterable) | 将多个可迭代的对象链接到一起, 并生成一个迭代器 |
compress - (data, selectors) | 根据一个迭代对象的值是否为真, 决定是否返回另一个迭代对象的值 |
takewhile - (predicate, iterable) | 当不满足参数条件时, 停止迭代 |
dropwhile - (predicate, iterable) | 当不满足参数条件时, 开始迭代 |
filterfalse - (predicate, iterable) | 将满足条件的参数剔除 |
islice - (iterable, stop) | 类似于切片, 将可迭代对象进行切片操作 |
groupby - (iterable, key) | 将参数按照指定的函数进行分组, 将key函数作用于原循环器的各个元素。根据key函数结果,将拥有相同函数结果的元素分到一个新的循环器。每个新的循环器以函数返回结果为标签。 |
tee - (iterable, n=2) | 用于从 iterable 创建 n 个独立的迭代器,以元组的形式返回,n 的默认值是 2。 |
zip_longest - (*iterable) | 和zip函数的区别是, zip_longest会以长参数截至 |
permutations - (iterable, r) | 对参数取两个元素, 生成一个新的元组, 包含元素对调后的元组 |
combinations - (iterable, r) | 对参数取两个元素, 生成一个新的元组, 不包含元素对调后的元组, 也不包含一个元组内有相同的值 |
combinations_with_replacement - (iterable, r) | 对参数取两个元素, 生成一个新的元组, 不包含元素对调后的元组, 包含一个元组内有相同的值 |
count
import itertools
# count的第一个参数为迭代的起始位置, 第二个参数为步长(可以为负数)
# 注意count 可以无限迭代, 必须设置迭代停止条件
for i in itertools.count(10, -5):
print(i)
if i < -30:
break
cycle
# 将"abc"无限循环生成
e_iter = itertools.cycle("abc")
for i in e_iter:
print(i)
if i == "b":
break
repeat
# 将第一个参数 重复生成第二个参数遍, 返回迭代器
e_iter = itertools.repeat([1, 2, 3], 3)
print(type(e_iter))
for i in e_iter:
print(i)
chain
a_list = [1, 2]
b_tuple = ("a", 3)
c_set = {"bb", 4}
d_dict = {"cc": "cc", "aa": "aa"}
# 可以将list, tupel, set, dict链接成一个新的迭代器(dict 只添加key)
e_iter = itertools.chain(a_list, b_tuple, c_set, e)
# 查看e_iter的类型为itertools
print(type(e_iter)) # <class 'itertools.chain'>
# 支持转为列表, 但不支持转为元组,集合等类型
print(list(e_iter)) # [1, 2, 'a', 3, 4, 'bb', 'cc', 'aa']
print(tuple(e_iter)) # ()
print(set(e_iter)) # set()
# 支持迭代
for i in e_iter:
print(i)
compress
import itertools
a_list = [11, 22, 33, 44]
b_list = (0, 1, True, False, True, True)
e_iter = itertools.compress(a_list, b_list)
print(list(e_iter)) # [22]
takewhile
a_list = [11, 22, 33, 44, 55]
# 当lambda 不满足时, 停止迭代
e_iter = itertools.takewhile(lambda x : x < 33, a_list)
for i in e_iter:
print(i)
dropwhile
# 当lambda 不满足条件时, 开始迭代
e_iter = itertools.dropwhile(lambda x : x < 33, a_list)
for i in e_iter:
print(i)
fiterfalse
类似于filter函数,对迭代对象的内容进行过滤
a_list = [1, 2, 3, 0, None]
# 当条件为None时, 返回被迭代对象中为false的内容
e_iter = itertools.filterfalse(None, a_list)
for i in e_iter:
print(i)
b_list = [1, 2, 3, 4]
# 这里时将满足lambda函数条件的结果排除, 将不满足的结果添加到e_iter中
e_iter = itertools.filterfalse(lambda x: x == 1, b_list)
for i in e_iter:
print(i)
islice
a_list = [11, 22, 33, 44, 55]
# 对a_list进行切片操作, 第二个参数:起始位置, 第三个参数: 切片次数, 第四个参数:步长
e_iter = itertools.islice(a_list, 1, 4, 2)
for i in e_iter:
print(i)
groupby
from itertools import groupby
def height_class(h):
if h > 180:
return "tall"
elif h < 160:
return "short"
else:
return "middle"
friends = [191, 158, 159, 165, 170, 180]
friendsss = groupby(friends, key=height_class)
for i, j in friendsss:
print(i)
print(list(j))
print('--------------------------------------')
data = "AaaBBbcCC"
datas = groupby(data, lambda x:x.upper())
for i, j in datas:
print(i)
print(list(j))
tee
e_iter = tee([1, 2], 3)
for i in e_iter:
# 此行打印的是迭代器
print(i)
for j in i:
# 此行打印的是每个迭代器内的数据
print(j)
zip_longest
# 会以长的参数结束, 为空的参数为None
e_iter = zip_longest([1, 2, 3], ["a", "b", "c", "d"])
for i in e_iter:
print(i)
permutations
对可迭代对象内的元素, 取一定数量的元素, 生成一个新的迭代器, 该迭代器由N个元组构成
a_list = [1, 2, 3]
# 对a_list取两个元素, 生成一个新的元组, 包含元素对调后的元组
e_iter = itertools.permutations(a_list, 2)
for i in e_iter:
print(i)
combinations
# 对a_list取两个元素, 生成一个新的元组, 不包含元素对调后的元组, 也不包含一个元组内有相同的值
e_iter = itertools.combinations(a_list, 2)
for i in e_iter:
print(i)
combinations_with_replacement
# 对a_list取两个元素, 生成一个新的元组, 不包含元素对调后的元组, 包含一个元组内有相同的值
e_iter = itertools.combinations_with_replacement(a_list, 2)
for i in e_iter:
print(i)