python标准模块-itertools

一. 组合生成器

import itertools

temp = [1, 2, 3, 4]
# permutations有序生成所有组合,会重复
# 第一位入参为可迭代对象,第二位表示生成元素得长度,生成元素为元组
"""
[(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (1, 4, 2), (1, 4, 3), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 1, 2), (3, 1, 4), (3, 2, 1), (3, 2, 4), (3, 4, 1), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2)]
"""
print(list(itertools.permutations(temp, 3)))

# combinations无序生成所有组合,无重复
# 第一位入参为可迭代对象,第二位表示生成元素得长度,生成元素为元组
"""
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]
"""
print(list(itertools.combinations(temp, 3)))

# combinations_with_replacement可替代的生成所有结果,不重复
"""
[(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 3), (1, 3, 4), (1, 4, 4), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 3), (2, 3, 4), (2, 4, 4), (3, 3, 3), (3, 3, 4), (3, 4, 4), (4, 4, 4)]
"""
print(list(itertools.combinations_with_replacement(temp, 3)))

a = {1, 2, 3}
b = {'a', 'b', 'c', 'd'}
# 计算两集合的笛卡尔积
"""
[(1, 'c'), (1, 'b'), (1, 'd'), (1, 'a'), (2, 'c'), (2, 'b'), (2, 'd'), (2, 'a'), (3, 'c'), (3, 'b'), (3, 'd'), (3, 'a')]
"""
print(list(itertools.product(a, b)))

二. 无限迭代器

import itertools
# cycle,用于执行循环操作
"""
这是第1个count,对应值为一
这是第2个count,对应值为二
这是第3个count,对应值为三
这是第4个count,对应值为一
这是第5个count,对应值为二
这是第6个count,对应值为三
这是第7个count,对应值为一
这是第8个count,对应值为二
这是第9个count,对应值为三
这是第10个count,对应值为一
循环结束
"""
count = 0
for one in itertools.cycle(['一', '二', '三']):
    if count < 10:
        count += 1
        print("这是第{}个count,对应值为{}".format(count, one))
    else:
        print("循环结束")
        break

# Itertools.repeat(object[, times]),在规定次数内持续生成对象
"""
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]
"""
for i in itertools.repeat([1,2,3],3):
    print(i)

三. 输入序列迭代器

import itertools

a, b = [1, 2, 3], ('a', 'b', 'c')
# 将多个序列组合成一个序列,支持跨序列操作
"""
1
2
3
a
b
c
"""
for one in itertools.chain(a, b):
    print(one)

# 累加方法
"""
[0, 1, 3, 6, 10]
"""
print(list(itertools.accumulate(range(5))))

# 真值筛选方法itertools.compress(data,selectors)
# selectors 可以是自定义的复杂方法,保证返回真或假即可
data = 'ACSASA'
selectors = [True, False, False, False, False, True]
"""
['A', 'A']
"""
print(list(itertools.compress(data, selectors)))

# itertools.groupby(iterable[,key])
# 按照key得要求对序列进行分组
"""
1 ['a']
2 ['aa']
3 ['aaa']
4 ['aaaa']
"""
te = ['a', 'aa', 'aaa', 'aaaa']
for key, val in itertools.groupby(te, len):
    print(key, list(val))

# itertools.filterfalse(predicate,iterable)
# 当且仅当predicate结果返回False,才会返回序列中当前的值
iterable = [1, 2, 3, 4]
# 返回小于等于2得元素值
"""
1
2
"""
for one in itertools.filterfalse(lambda x: x > 2, iterable):
    print(one)

你可能感兴趣的:(python,python,开发语言)