python之list元素两两组合、多个list元素多种组合,即笛卡尔积

问题:想要一个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)]
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值