python解决排列组合

笛卡尔积:itertools.product(*iterables[, repeat])

import itertools
for i in itertools.product(‘BCDEF‘, repeat = 2):
    print(‘‘.join(i),end=",")
print(‘\n‘)

# 输出 BB BC BD BE BF CB CC CD CE CF DB DC DD DE DF EB EC ED EE EF FB FC FD FE FF

  两个元组进行笛卡尔积:

import itertools
a = (1, 2)
b = (‘A‘, ‘B‘, ‘C‘)
c = itertools.product(a,b)
for i in c:
    print(i,end=",")

# 输出(1, ‘A‘) (1, ‘B‘) (1, ‘C‘) (2, ‘A‘) (2, ‘B‘) (2, ‘C‘)

排列:itertools.permutations(iterable[, r])

import itertools
for i in itertools.permutations(‘BCD‘, 2):
    print(‘‘.join(i),end=",")
# 输出 BC BD CB CD DB DC
print(‘\n‘)

组合:itertools.combinations(iterable, r)

import itertools
for i in itertools.combinations(‘BCDEF‘, 2):
    print(‘‘.join(i),end=" ")
# 输出 BC BD BE BF CD CE CF DE DF EF
print(‘\n‘)

组合(包含自身重复):itertools.combinations_with_replacement(iterable, r)

import itertools
for i in itertools.combinations_with_replacement(‘ABC‘, 3):
    print (‘‘.join(i),end=‘ ‘)

# 输出 AAA AAB AAC ABB ABC ACC BBB BBC BCC CCC
print(‘\n‘)

举例

‘BCDEF五个字母组合问题‘
import itertools

print("1个组合:")
for i, val in enumerate(list(itertools.combinations(‘BCDEF‘, 1))):
    print("序号:%s   值:%s" % (i + 1, ‘‘.join(val)))
print("2个组合:")
for i, val in enumerate(list(itertools.combinations(‘BCDEF‘, 2))):
    print("序号:%s   值:%s" % (i + 1, ‘‘.join(val)))
print("3个组合:")
for i, val in enumerate(list(itertools.combinations(‘BCDEF‘, 3))):
    print("序号:%s   值:%s" % (i + 1, ‘‘.join(val)))
print("4个组合:")
for i, val in enumerate(list(itertools.combinations(‘BCDEF‘, 4))):
    print("序号:%s   值:%s" % (i + 1, ‘‘.join(val)))
print("5个组合:")
for i, val in enumerate(list(itertools.combinations(‘BCDEF‘, 5))):
    print("序号:%s   值:%s" % (i + 1, ‘‘.join(val)))

原文地址:https://www.cnblogs.com/xiao-apple36/p/10861830.html

时间: 2024-08-03 05:59:08

python解决排列组合的相关文章

python 实现排列组合

1.python语言简单.方便,其内部可以快速实现排列组合算法,下面做简单介绍. 2.一个列表数据任意组合 2.1主要是利用自带的库 #_*_ coding:utf-8 _*_ #__author__='dragon' import itertools list1 = [1,2,3,4,5] list2 = [] for i in range(1,len(list1)+1): iter = itertools.combinations(list1,i) list2.append(list(ite

python 编写排列组合

python在编写排列组合是会用到  itertools 模块 排列 import itertools mylist = list(itertools.permutations(['A','B','C','D'],4)) # 全排列 print(mylist) mylist1 = list(itertools.permutations(['A','B','C','D'],3)) # 4个里面选3个排列 print(mylist1) #5!=1*2*3*4*5 #0!=1 #M个选N个 M!/(M

[微软]有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小_利用排列组合思路解决_python版

(原题出自微软公司面试题)问题如下:有两个序列a,b,大小都为n,序列元素的值任意整数,无序:要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小.例如:a=[100,99,98,1,2, 3]b=[1, 2, 3, 4,5,40] 题目是看到QQ群友发的,网上也百度了下目前已经有好几种解法了.写了半天有点晕,后面忽然想到中学时候数学里面的排列组合的方法.方法对于较短的list可行,长list组合情况太多,可能耗时太长或溢出. 1 from itertools im

Python算法题(二)——国际象棋棋盘(排列组合问题,最小的K个数)

题目一(输出国际象棋棋盘)  分析: 用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格.   主要代码: for i in range(8): for j in range(8): if (i+j)%2!=0: print(chr(219)*2,end='') else: print(' ',end='') print('') 题目二(排列组合问题)   有1.2.3.4个数字,能组成多少个互不相同且无重复数字的四位数?都是多少?   分析:  我们可以先预测一下,共有2

自然语言处理(NLP) - 数学基础(1) - 排列组合

正如我在<自然语言处理(NLP) - 数学基础(1) - 总述>一文中所提到的NLP所关联的概率论(Probability Theory)知识点是如此的多, 饭只能一口一口地吃了, 我们先开始最为大家熟知和最基础的知识点吧, 排列组合. 虽然排列组合这个知识点大家是相当地熟知, 也是相当地基础, 但是却是十分十分十分地重要. NLP届掌门人斯坦福大学的Daniel Jurafsky(D. 朱夫斯凯)和科罗拉多大学James H. Martin(J. H. 马丁)在其NLP巨作<自然语言处

排列组合

(常考)错位排列 有N封信和N个信封,每封信都不装在自己信封里的排列种数记作Dn,则 D1=0,D2=1,D3=2,D4=9,D5=44,D6=265 一.相邻问题---捆绑法 不邻问题---插空法 对于某几个元素不相邻的排列问题,可先将其他元素排好,再将不相邻元素在已排好的元素之间及两端空隙中插入即可. [例题1]一张节目表上原有3个节目,如果保持这3个节目的相对顺序不变,再添进去2个新节目,有多少种安排方法? A.20 B.12 C.6 D.4 [答案]A. [解析] 以下内容需要回复才能看

用递归写排列组合问题

最近递归弄的人头疼,但是这两天看过来也稍微总结了一些不能称得上是技巧的技巧吧 问题如下,将1,2,3,4这四个数字排列组合的输出来,看网上有个很二的方法吧,就是将10000以内的数全部输出再筛选,对此有点无语,但是程序倒是挺好编的,嘿嘿 回归到正题中,用递归的思想解决 (1)采用旋转数字的方法,当步长为1时,1234还是1234,步长为2的时候,1234可以变为1243.1324...,步长为3 的时候,1234可以变为1423,诸如此类,最重要的能体现递归的就是将每次递归一次的数字还可以接着旋

SPOJ - AMR11H Array Diversity (水题排列组合或容斥)

题意:给定一个序列,让你求两种数,一个是求一个子序列,包含最大值和最小值,再就是求一个子集包含最大值和最小值. 析:求子序列,从前往记录一下最大值和最小值的位置,然后从前往后扫一遍,每个位置求一下数目就好. 求子集可以用排列组合解决,很简单,假设最大值个数是 n,最小值的数是 m,总数是 N,答案就是 (2^n-1) * (2^m-1)*2^(N-m-n), 当然要特殊判断最大值和最小值相等的时候. 当然也可以用容斥来求,就是总数 - 不是最大值的数目 - 不是最小值的数目 + 不是最大值也不是

高中数学排列组合

一.特殊元素和特殊位置优先策略 例1.由0,1,2,3,4,5可以组成多少个没有重复数字五位奇数. 解:由于末位和首位有特殊要求,应该优先安排,以免不合要求的元素占了这两个位置. 先排末位共有 然后排首位共有 最后排其它位置共有 由分步计数原理得 二.相邻元素捆绑策略 例2. 7人站成一排 ,其中甲乙相邻且丙丁相邻, 共有多少种不同的排法. 解:可先将甲乙两元素捆绑成整体并看成一个复合元素,同时丙丁也看成一个复合元素,再与其它元素进行排列,同时对相邻元素内部进行自排.由分步计数原理可得共有种不同