前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python的排列组合函数

Python的排列组合函数

作者头像
疯狂软件李刚
发布2020-06-24 11:24:53
20.4K0
发布2020-06-24 11:24:53
举报
文章被收录于专栏:疯狂软件李刚疯狂软件李刚

导读

排列、组合在读书时学过吧,让我们看看强大的Python来为我们实现排列组合。

itertools模块下提供了一些用于生成排列组合的工具函数。

  • product(p, q, … [repeat=1]):用序列p、q、...序列中的元素进行排列(元素会重复)。就相当于使用嵌套循环组合。
  • permutations(p[, r]):从序列p中取出r个元素的组成全排列,组合得到元组作为新迭代器的元素。
  • combinations(p, r):从序列p中取出r个元素组成全组合,元素不允许重复,组合得到元组作为新迭代器的元素。
  • combinations_with_replacement(p, r),从序列p中取出r个元素组成全组合,元素允许重复,组合得到元组作为新迭代器的元素。

如下程序示范了上面4个函数的用法。

代码语言:javascript
复制
import itertools as it

# 使用两个序列进行排列组合
for e in it.product('AB', 'CD'):
    print(''.join(e), end=', ') # AC, AD, BC, BD,
print('\n---------')
# 使用一个序列、重复2次进行全排列
for e in it.product('AB', repeat=2):
    print(''.join(e), end=', ') # AA, AB, BA, BB,
print('\n---------')
# 从序列中取2个元素进行排列
for e in it.permutations('ABCD', 2):
    print(''.join(e), end=', ') # AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC,
print('\n---------')
# 从序列中取2个元素进行组合、元素不允许重复
for e in it.combinations('ABCD', 2):
    print(''.join(e), end=', ') # AB, AC, AD, BC, BD, CD,
print('\n---------')
# 从序列中取2个元素进行组合、元素允许重复
for e in it.combinations_with_replacement('ABCD', 2):
    print(''.join(e), end=', ') # AA, AB, AC, AD, BB, BC, BD, CC, CD, DD,

上面程序用到了一个字符串的join()方法,该方法用于将元组的所有元素都连接成一个字符串。

运行上面程序,看到如下输出。

代码语言:javascript
复制
AC, AD, BC, BD,
---------
AA, AB, BA, BB,
---------
AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC,
---------
AB, AC, AD, BC, BD, CD,
---------
AA, AB, AC, AD, BB, BC, BD, CC, CD, DD,

关于product()函数和permutations()函数,还可参考如下程序

代码语言:javascript
复制
import itertools as it

# 从4个字符中取2个,组成所有排列(可以重复),一共4*4个
for e in it.product('ABCD', repeat=2):
    print(''.join(e), end=", ")
print('\n----------')    
# 先用AB与CD排列,然后用排列的结果执行长度为2的排列,一共16个
for e in it.product('AB', 'CD', repeat=2):
    print(''.join(e), end=", ")
print('\n----------')      
# 从4个字符中取2个,组成所有全排列(不允许重复),一共4×3个
for e in it.permutations('ABCD', 2):
    print(''.join(e), end=", ")
print('\n----------') 
# 从4个字符的全排列,一共4×3×2×1个
for e in it.permutations('ABCD'):
    print(''.join(e), end=", ")

运行结果如下:

代码语言:javascript
复制
AA, AB, AC, AD, BA, BB, BC, BD, CA, CB, CC, CD, DA, DB, DC, DD,
----------
ACAC, ACAD, ACBC, ACBD, ADAC, ADAD, ADBC, ADBD, BCAC, BCAD, BCBC, BCBD, BDAC, BDAD, BDBC, BDBD,
----------
AB, AC, AD, BA, BC, BD, CA, CB, CD, DA, DB, DC,
----------
ABCD, ABDC, ACBD, ACDB, ADBC, ADCB, BACD, BADC, BCAD, BCDA, BDAC, BDCA, CABD, CADB, CBAD, CBDA, CDAB, CDBA, DABC, DACB,DBAC, DBCA, DCAB, DCBA, 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 疯狂软件李刚 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档