【python 内置模块】itertools

2024-01-20 00:00:00

目录:

count(start=0, step=1) 从起始值开始,按固定步长无限生成数值序列

这类迭代器可以无限生成值,使用时必须通过某种方式限制输出,否则会导致无限循环。

from itertools import count

# 生成从 10 开始的整数序列
for i in count(10):
    if i >= 15: break
    print(i)  # 输出:10 11 12 13 14

cycle(iterable) 无限重复传入序列的元素

这类迭代器可以无限生成值,使用时必须通过某种方式限制输出,否则会导致无限循环。

from itertools import cycle

colors = ['red', 'green', 'blue']
for i, color in enumerate(cycle(colors)):
    if i >= 5: break
    print(color)  # 输出:red green blue red green

repeat(object[, times]) 重复生成指定对象,可指定重复次数

from itertools import repeat

print(list(repeat('A', 5)))  # 输出:['A', 'A', 'A', 'A', 'A']
print('A' * 5)  # 输出:AAAAA

chain(*iterables) 将多个可迭代对象连接成一个迭代器

from itertools import chain

print(list(chain('ABC', 'DEF')))  # 输出:['A', 'B', 'C', 'D', 'E', 'F']
print(list(chain.from_iterable(['ABC', 'DEF'])))  # 输出:['A', 'B', 'C', 'D', 'E', 'F']

compress(data, selectors) 根据选择器序列的真假值筛选数据

from itertools import compress

letters = ['a', 'b', 'c', 'd', 'e']
mask = [True, False, False, True, False]
print(list(compress(letters, mask)))  # 输出:['a', 'd']

zip_longest(*iterables, fillvalue=None) 以最长序列为准,短序列用 fillvalue 填充

from itertools import zip_longest

print(list(zip_longest('ABCD', 'xy', fillvalue='-')))  
# 输出:[('A', 'x'), ('B', 'y'), ('C', '-'), ('D', '-')]

print(list(zip_longest('xy', 'ABCD', fillvalue='-')))  
# 输出:[('x', 'A'), ('y', 'B'), ('-', 'C'), ('-', 'D')]

product(*iterables, repeat=1) 计算笛卡尔积,相当于嵌套的 for 循环

from itertools import product

print(list(product('AB', '12')))  
# 输出:[('A', '1'), ('A', '2'), ('B', '1'), ('B', '2')]

print(list(product('AB', repeat=2)))  
# 输出:[('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]

permutations(iterable, r=None) 生成长度为 r 的排列,元素顺序不同为不同排列

from itertools import permutations

print(list(permutations('ABC', 2))  )
# 输出:[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

combinations(iterable, r) 生成长度为 r 的组合,不考虑元素顺序

from itertools import combinations

print(list(combinations('ABC', 2)))  
# 输出:[('A', 'B'), ('A', 'C'), ('B', 'C')]

combinations_with_replacement(iterable, r) 生成允许元素重复的组合

from itertools import combinations_with_replacement

print(list(combinations_with_replacement('ABC', 2)))  
# 输出:[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

计算两个向量的点积

import operator
from itertools import starmap

vector1 = [1, 2, 3]
vector2 = [4, 5, 6]
dot_product = sum(starmap(operator.mul, zip(vector1, vector2)))  
print(dot_product)  # 输出:32

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: