python之list元素两两组合、多个list元素多种组合,即笛卡尔积
·
问题:想要一个list中元素的两两组合、多个list元素的各种组合
解决:利用itertools.product(*iterables, repeat=2)
求笛卡尔积即可
说明:笛卡尔积是两个集合x
、y
的笛卡尔积,表示为:x
× y
,结果是:第一个对象是x
的成员,第二个对象是集合y
中的任一元素,eg:x=(x1,x2)
,y=(y1,y2)
,则x
× y
=[(x1,y1),(x1,y2),(x2,y1),(x2,y2)]
示例如下:
>>> from itertools import product
>>> list1 = ["x","y","z"]
>>> list2 = ["a","b","c"]
>>> list3 = [1,2,3]
>>> result = product(list1, repeat=2)
>>> list(result)
[('x', 'x'), ('x', 'y'), ('x', 'z'), ('y', 'x'), ('y', 'y'), ('y', 'z'), ('z', 'x'), ('z', 'y'), ('z', 'z')
>>> result = product(list1, list1)
>>> list(result)
[('x', 'x'), ('x', 'y'), ('x', 'z'), ('y', 'x'), ('y', 'y'), ('y', 'z'), ('z', 'x'), ('z', 'y'), ('z', 'z')]
>>> result = product(list1, list2)
>>> list(result)
[('x', 'a'), ('x', 'b'), ('x', 'c'), ('y', 'a'), ('y', 'b'), ('y', 'c'), ('z', 'a'), ('z', 'b'), ('z', 'c')]
>>> result = product(list1, list2, list3)
>>> for x in result:
... print x
...
('x', 'a', 1)
('x', 'a', 2)
('x', 'a', 3)
('x', 'b', 1)
('x', 'b', 2)
('x', 'b', 3)
('x', 'c', 1)
('x', 'c', 2)
('x', 'c', 3)
('y', 'a', 1)
('y', 'a', 2)
('y', 'a', 3)
('y', 'b', 1)
('y', 'b', 2)
('y', 'b', 3)
('y', 'c', 1)
('y', 'c', 2)
('y', 'c', 3)
('z', 'a', 1)
('z', 'a', 2)
('z', 'a', 3)
('z', 'b', 1)
('z', 'b', 2)
('z', 'b', 3)
('z', 'c', 1)
('z', 'c', 2)
('z', 'c', 3)
>>> result = product(list1, list2, list3)
>>> list(result)
[('x', 'a', 1), ('x', 'a', 2), ('x', 'a', 3), ('x', 'b', 1), ('x', 'b', 2), ('x', 'b', 3), ('x', 'c', 1), ('x', 'c', 2), ('x', 'c', 3), ('y', 'a', 1), ('y', 'a', 2), ('y', 'a', 3), ('y', 'b', 1), ('y', 'b', 2), ('y', 'b', 3), ('y', 'c', 1), ('y', 'c', 2), ('y', 'c', 3), ('z', 'a', 1), ('z', 'a', 2), ('z', 'a', 3), ('z', 'b', 1), ('z', 'b', 2), ('z', 'b', 3), ('z', 'c', 1), ('z', 'c', 2), ('z', 'c', 3)]
更多推荐
已为社区贡献2条内容
所有评论(0)