问题:想要一个list中元素的两两组合、多个list元素的各种组合
解决:利用itertools.product(*iterables, repeat=2)求笛卡尔积即可
说明:笛卡尔积是两个集合xy的笛卡尔积,表示为: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)]
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐