Python itertools 模块

文摘   科技   2025-01-04 08:09   上海  
点击蓝字,关注山海摸鱼人

目录:

  1. 什么是 itertools 模块?
  2. 无限迭代器 countcycle()repeat()
  3. 迭代器组合函数 chain()zip_longest()
  4. 排列组合函数 product()permutations()combinations()
  5. 过滤函数filterfalse()dropwhile()takewhile()

itertools 模块为我们提供了一系列高效处理迭代器的工具。无论是处理简单的循环,还是复杂的数据组合和排列,itertools 都能大显身手,有助于写出更简洁高效的代码。

什么是 itertools 模块?

itertools 是Python标准库中的一个模块,它提供了各种用于操作迭代器的函数。迭代器是Python中一种强大的概念,它允许我们逐个访问数据集合中的元素,而不需要一次性将整个集合加载到内存中。这在处理大数据集时非常有用,因为它可以显著减少内存的使用。

itertools 模块包含了许多函数,这些函数大致可以分为以下几类:

  1. 无限迭代器:可以生成无限序列的迭代器。
  2. 迭代器组合函数:用于将多个迭代器组合成一个新的迭代器。
  3. 排列组合函数:用于生成排列、组合和笛卡尔积等。
  4. 过滤函数:用于根据条件过滤迭代器中的元素。

无限迭代器

1、count() 函数用于创建一个从指定值开始,以指定步长递增的无限迭代器。

import itertools

# 创建一个从1开始,步长为2的无限迭代器
counter = itertools.count(12)

# 输出前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 = [123]
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 = [123]
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([123])

# 输出所有排列
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([123], 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, [12345])

# 输出过滤后的结果
for item in filterer:
    print(item)  
# 输出:
# 1
# 3
# 5

2、dropwhile 函数会在谓词函数(用于判断的函数)返回 True 时,丢弃迭代器中的元素。一旦谓词函数返回 Falsedropwhile 就会停止丢弃元素,并返回迭代器中剩余的所有元素。(去头直到 FalseFalse不去)

import itertools

# 丢弃列表中开头的所有小于3的元素
dropper = itertools.dropwhile(lambda x: x < 3, [123452])

# 输出丢弃后的结果
for item in dropper:
    print(item)
# 输出:
# 3
# 4
# 5
# 2

3、takewhile 函数会在谓词函数返回 True 时,从迭代器中获取元素。一旦谓词函数返回 Falsetakewhile 就会停止获取元素,不会再返回后续的元素。(取头直到 FalseFalse不取)

import itertools

# 取列表中开头的所有小于4的元素
taker = itertools.takewhile(lambda x: x < 4, [12345])

# 输出取到的结果
for item in taker:
    print(item)  
# 输出:
# 1
# 2
# 3

山海摸鱼人
致力于记录美好之瞬间,追寻美好之明天。
 最新文章