Menu
CoddyTech

itertools 模块

Coddy Python 迭代器 课程的第 8 课,共 13 课。

Python 中的 itertools 模块是一组功能强大的工具,可以高效地处理迭代器,同时快速且节省内存。它提供了一组函数,用于创建迭代器,从而高效地进行循环和数据处理。我们来看看这个模块中一些最实用的函数。

导入 itertools

import itertools

无限迭代器

这些迭代器会无限持续下去,除非你停止它们:

  • count(start, step):从起始值开始无限递增计数
  • cycle(iterable):无限循环遍历一个可迭代对象
  • repeat(elem, [n]):重复一个元素 n 次(如果未指定 n,则无限重复)

在最短输入序列结束时终止的迭代器

  • chain(*iterables):将多个可迭代对象连接起来
  • islice(iterable, start, stop[, step]):对迭代器进行切片
  • zip_longest(*iterables, fillvalue=None):类似于 zip(),但会持续到最长的可迭代对象耗尽

组合迭代器

  • product(*iterables, repeat=1):输入可迭代对象的笛卡尔积
  • permutations(iterable, r=None):所有可能的长度为 r 的排列
  • combinations(iterable, r):按排序顺序排列的长度为 r 的组合

使用示例

import itertools

# 使用 count
for i in itertools.count(10, 2):
    if i > 20:
        break
    print(i)  # 输出 10, 12, 14, 16, 18, 20

# 使用 cycle
colors = itertools.cycle(['red', 'green', 'blue'])
for _ in range(6):
    print(next(colors))  # 输出 red, green, blue, red, green, blue

# 使用 chain
numbers = itertools.chain([1, 2, 3], [4, 5, 6])
print(list(numbers))  # 输出 [1, 2, 3, 4, 5, 6]

# 使用 combinations
letters = 'ABCD'
print(list(itertools.combinations(letters, 2)))
# 输出 [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]

itertools 模块还提供了许多其他函数,每个函数都旨在高效地解决特定的迭代问题。使用这些工具,你可以在 Python 中处理迭代器和可迭代对象时,编写更简洁、性能更好的代码。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

简单

创建一个程序,使用 itertools 模块生成并处理一系列扑克牌。程序应演示如何使用 product() 和 islice() 函数。

已提供以下内容:

  • 两个输入字符串:一个表示点数,一个表示花色,两者以逗号分隔
  • 两个整数:用于切片的起始位置和结束位置

你的程序应:

  1. 使用 itertools.product() 生成所有可能的点数和花色组合
  2. 根据给定的起始位置和结束位置,使用 itertools.islice() 选取这些组合中的一部分
  3. 将每张牌格式化为 "Rank of Suit"(例如 "Ace of Spades")
  4. 将格式化后的每张牌打印在新的一行

输入格式如下:

  • 第一行:点数(以逗号分隔的字符串)
  • 第二行:花色(以逗号分隔的字符串)
  • 第三行:两个以空格分隔的整数,分别表示起始位置和结束位置

亲手试试

import itertools

# 读取输入
ranks = input().split(',')
suits = input().split(',')
start, stop = map(int, input().split())

# TODO:在下方编写你的代码
# 用 itertools.product() 生成点数和花色的所有可能组合
# 用 itertools.islice() 选取其中一部分组合
# 将每张牌格式化为 "Rank of Suit"

# 每张格式化后的牌单独打印一行
# print(card)

Python 迭代器中的所有课

自己练习: Python 在线编译器