如何使用itertools.product计算多个列表的笛卡尔积?
- 内容介绍
- 文章标签
- 相关推荐
本文共计819个文字,预计阅读时间需要4分钟。
直接上结论:
常见错误是把列表当参数直接传进去,比如 product([[1,2], [3,4]]) —— 这样只会得到两个元组:(([1, 2],), ([3, 4],)),根本不是笛卡尔积。正确做法是解包:
-
list(product([1,2], [3,4]))→[(1, 3), (1, 4), (2, 3), (2, 4)] - 三个列表:
product([1,2], ['a'], [True, False]) - 动态数量?用
*lists解包:product(*list_of_lists)
嵌套列表太多时,repeat 比重复写参数更安全
比如要算 [0,1] × [0,1] × [0,1](即所有 3 位二进制组合),写三遍 [0,1] 容易漏或错位。
本文共计819个文字,预计阅读时间需要4分钟。
直接上结论:
常见错误是把列表当参数直接传进去,比如 product([[1,2], [3,4]]) —— 这样只会得到两个元组:(([1, 2],), ([3, 4],)),根本不是笛卡尔积。正确做法是解包:
-
list(product([1,2], [3,4]))→[(1, 3), (1, 4), (2, 3), (2, 4)] - 三个列表:
product([1,2], ['a'], [True, False]) - 动态数量?用
*lists解包:product(*list_of_lists)
嵌套列表太多时,repeat 比重复写参数更安全
比如要算 [0,1] × [0,1] × [0,1](即所有 3 位二进制组合),写三遍 [0,1] 容易漏或错位。

