如何通过Python的itertools模块使用product函数高效生成多个列表的笛卡尔积?
- 内容介绍
- 文章标签
- 相关推荐
本文共计768个文字,预计阅读时间需要4分钟。
pythonimport itertools
itertools.product 生成多个可迭代对象的笛卡尔积返回一个生成器,每个元素是元组形式的组合示例:
- 最简用法:
list(product([1, 2], ['a', 'b']))→[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')] - 多个序列支持任意数量参数:
product([1, 2], ['x'], [True, False]) - 单个序列重复使用需显式传入
repeat参数:product('ab', repeat=3)等价于product('ab', 'ab', 'ab')
常见错误:把列表当单个参数传入导致嵌套
写成 product([[1, 2], ['a', 'b']]) 会把整个列表当作一个可迭代对象,结果只有一项:([[1, 2], ['a', 'b']],) —— 这不是笛卡尔积,是“包了一层”。
本文共计768个文字,预计阅读时间需要4分钟。
pythonimport itertools
itertools.product 生成多个可迭代对象的笛卡尔积返回一个生成器,每个元素是元组形式的组合示例:
- 最简用法:
list(product([1, 2], ['a', 'b']))→[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')] - 多个序列支持任意数量参数:
product([1, 2], ['x'], [True, False]) - 单个序列重复使用需显式传入
repeat参数:product('ab', repeat=3)等价于product('ab', 'ab', 'ab')
常见错误:把列表当单个参数传入导致嵌套
写成 product([[1, 2], ['a', 'b']]) 会把整个列表当作一个可迭代对象,结果只有一项:([[1, 2], ['a', 'b']],) —— 这不是笛卡尔积,是“包了一层”。

