利用itertools进行排列组合

求两个序列的笛卡尔积,或者在一个序列上进行排列组合,python标准库itertools提供了生成的功能,可以方便解决这个问题。

首先导入库

import itertools

product 组合

for i in itertools.product('ABCD', repeat=2):
    print(i)

('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'B') ('B', 'C') ('B', 'D') ('C', 'A') ('C', 'B') ('C', 'C') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C') ('D', 'D')

permutations 排列

for i in itertools.permutations('ABCD', 2):
    print(i)

('A', 'B') ('A', 'C') ('A', 'D') ('B', 'A') ('B', 'C') ('B', 'D') ('C', 'A') ('C', 'B') ('C', 'D') ('D', 'A') ('D', 'B') ('D', 'C')

combinations 组合(无重复)

for i in itertools.combinations('ABCD', 2):
    print(i)

('A', 'B') ('A', 'C') ('A', 'D') ('B', 'C') ('B', 'D') ('C', 'D')

combinations_with_replacement(有重复)

for i in itertools.combinations_with_replacement('ABCD', 2):
    print(i)

('A', 'A') ('A', 'B') ('A', 'C') ('A', 'D') ('B', 'B') ('B', 'C') ('B', 'D') ('C', 'C') ('C', 'D') ('D', 'D')

repeat参数控制生成的序列元素个数,比如将combinations中的参数换成3。

for i in itertools.combinations('ABCD', 3):
    print(i)

('A', 'B', 'C')
('A', 'B', 'D')
('A', 'C', 'D')
('B', 'C', 'D')

上述函数生成的对象都支持next()方法,以itertools.combinations举例。

a =itertools.combinations('ABCD', 3)
next(a)
('A', 'B', 'C')
next(a)
('A', 'B', 'D')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值