首页 > 技术文章 > python 坐标遍历 生成笛卡尔积矩阵

harrymore 2021-07-19 11:56 原文

原文链接:https://www.cnblogs.com/harrymore/p/15029596.html

1. 主要场景

  • 生成两个列表的组合。
  • 生成坐标

 

2. 函数

用的是python itertools库的product函数,它返回一个生成器,生成元组。

这个函数主要有两种用法,一种用法是对两个可遍历对象进行组合,如两个列表:

from itertools import product
A = [1,2,3]
B = ["a", "b", "c"]
for item in product(A, B):
    print(item)

输出:

(1, 'a')
(1, 'b')
(1, 'c')
(2, 'a')
(2, 'b')
(2, 'c')
(3, 'a')
(3, 'b')
(3, 'c')

这种情况等价于:

((x,y) for x in A for y in B)

 

另外一种用法是对本身进行生成,如我有一个边长为4*4的矩形,想生成所有坐标:

from itertools import product
for item in product(range(4), repeat=2):
    print(item)

输出:

(0, 0)
(0, 1)
(0, 2)
(0, 3)
(1, 0)
(1, 1)
(1, 2)
(1, 3)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(3, 0)
(3, 1)
(3, 2)
(3, 3)

其中repeat参数指示你生成的目标的维度,以上面为例,如果生成的是3维的坐标,则指定repeat=3即可。

 

3. 参考

https://docs.python.org/3/library/itertools.html

(完)

推荐阅读