目录:
什么是 itertools
模块?无限迭代器 count
、cycle()
、repeat()
迭代器组合函数 chain()
、zip_longest()
排列组合函数 product()
、permutations()
、combinations()
过滤函数 filterfalse()
、dropwhile()
、takewhile()
itertools
模块为我们提供了一系列高效处理迭代器的工具。无论是处理简单的循环,还是复杂的数据组合和排列,itertools
都能大显身手,有助于写出更简洁高效的代码。
什么是 itertools
模块?
itertools
是Python标准库中的一个模块,它提供了各种用于操作迭代器的函数。迭代器是Python中一种强大的概念,它允许我们逐个访问数据集合中的元素,而不需要一次性将整个集合加载到内存中。这在处理大数据集时非常有用,因为它可以显著减少内存的使用。
itertools
模块包含了许多函数,这些函数大致可以分为以下几类:
无限迭代器:可以生成无限序列的迭代器。 迭代器组合函数:用于将多个迭代器组合成一个新的迭代器。 排列组合函数:用于生成排列、组合和笛卡尔积等。 过滤函数:用于根据条件过滤迭代器中的元素。
无限迭代器
1、count()
函数用于创建一个从指定值开始,以指定步长递增的无限迭代器。
import itertools
# 创建一个从1开始,步长为2的无限迭代器
counter = itertools.count(1, 2)
# 输出前5个值
for _ in range(5):
print(next(counter)) # 输出:1 3 5 7 9
2、cycle()
函数用于创建一个无限循环遍历给定序列的迭代器。
import itertools
# 创建一个循环遍历列表的无限迭代器
cycler = itertools.cycle(['山海摸鱼人', '山海闲游者', '山海逍遥客'])
# 输出前6个值
for _ in range(6):
print(next(cycler))
# 输出:
# 山海摸鱼人
# 山海闲游者
# 山海逍遥客
# 山海摸鱼人
# 山海闲游者
# 山海逍遥客
3、repeat()
repeat()
函数用于创建一个无限重复某个值的迭代器。
import itertools
# 创建一个无限重复数字5的迭代器
repeater = itertools.repeat(5)
# 输出前3个值
for _ in range(3):
print(next(repeater)) # 输出:5 5 5
迭代器组合函数
1、chain()
函数用于将多个迭代器连接成一个迭代器。
import itertools
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
# 将两个列表连接成一个迭代器
chainer = itertools.chain(list1, list2)
# 输出迭代器中的所有元素
for item in chainer:
print(item)
2、zip_longest()
zip_longest()
函数类似于内置的 zip()
函数,但它会继续迭代直到所有输入迭代器都耗尽,缺失的值将填充为指定的填充值(默认为 None
)。
import itertools
list3 = [1, 2, 3]
list4 = ['a', 'b']
# 使用zip_longest连接两个列表
zipper = itertools.zip_longest(list3, list4, fillvalue='-')
# 输出连接后的结果
for item in zipper:
print(item)
# 输出:
# (1, 'a')
# (2, 'b')
# (3, '-')
排列组合函数
1、product()
函数用于生成多个输入迭代器的笛卡尔积。
import itertools
colors = ['红', '蓝']
sizes = ['S', 'M', 'L']
# 生成颜色和尺寸的笛卡尔积
producter = itertools.product(colors, sizes)
# 输出笛卡尔积的所有结果
for item in producter:
print(item)
# 输出:
# ('红', 'S')
# ('红', 'M')
# ('红', 'L')
# ('蓝', 'S')
# ('蓝', 'M')
# ('蓝', 'L')
2、permutations()
函数用于生成给定序列的所有排列。
import itertools
# 生成列表 [1, 2, 3] 的所有排列
permuter = itertools.permutations([1, 2, 3])
# 输出所有排列
for permutation in permuter:
print(permutation)
# 输出:
# (1, 2, 3)
# (1, 3, 2)
# (2, 1, 3)
# (2, 3, 1)
# (3, 1, 2)
# (3, 2, 1)
3、combinations()
函数用于生成给定序列的所有组合,组合中的元素顺序不重要。
import itertools
# 生成列表 [1, 2, 3] 中选取2个元素的所有组合
combiner = itertools.combinations([1, 2, 3], 2)
# 输出所有组合
for combination in combiner:
print(combination)
# 输出:
# (1, 2)
# (1, 3)
# (2, 3)
过滤函数
1、filterfalse()
函数与 Python 内置的 filter()
函数相反,它会过滤掉所有使谓词函数返回 True
的元素。(去真留假)
import itertools
# 过滤掉列表中的偶数
filterer = itertools.filterfalse(lambda x: x % 2 == 0, [1, 2, 3, 4, 5])
# 输出过滤后的结果
for item in filterer:
print(item)
# 输出:
# 1
# 3
# 5
2、dropwhile
函数会在谓词函数(用于判断的函数)返回 True
时,丢弃迭代器中的元素。一旦谓词函数返回 False
,dropwhile
就会停止丢弃元素,并返回迭代器中剩余的所有元素。(去头直到 False
,False
不去)
import itertools
# 丢弃列表中开头的所有小于3的元素
dropper = itertools.dropwhile(lambda x: x < 3, [1, 2, 3, 4, 5, 2])
# 输出丢弃后的结果
for item in dropper:
print(item)
# 输出:
# 3
# 4
# 5
# 2
3、takewhile
函数会在谓词函数返回 True
时,从迭代器中获取元素。一旦谓词函数返回 False
,takewhile
就会停止获取元素,不会再返回后续的元素。(取头直到 False
,False
不取)
import itertools
# 取列表中开头的所有小于4的元素
taker = itertools.takewhile(lambda x: x < 4, [1, 2, 3, 4, 5])
# 输出取到的结果
for item in taker:
print(item)
# 输出:
# 1
# 2
# 3