在日常的工作學(xué)習(xí)中,我們肯定會遇到排列組合問題,比如,在5種顏色的球中,任意取3個(gè),共有多少種組合方式,這也包括有放回和無放回抽樣。
10年積累的網(wǎng)站建設(shè)、做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有臺江免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
在python中,自帶的排列組合函數(shù),都在python的指導(dǎo)工具包itertools中。
product 笛卡爾積(有放回抽樣排列)
permutations 排列(不放回抽樣排列)
combinations 組合,沒有重復(fù)(不放回抽樣組合)
combinations_with_replacement 組合,有重復(fù)(有放回抽樣組合)
python3中返回的為對象,可以通過迭代讀取將值輸出。
end
以上四種情況均為最常見的排列組合,從有無順序和是否重復(fù)兩個(gè)維度進(jìn)行思考,建議理解并背誦。
在使用python計(jì)算排列組合之前,需要計(jì)算階乘,可以有兩種方式,一是使用math庫中的factorial函數(shù),二是使用如下的遞歸函數(shù)。
按照排列的公式:
按照組合的公式:
3.1 生日問題
假設(shè)一個(gè)班級中共有n個(gè)人,一年有365天,其中每天作為生日的概率是相等的,那么其中至少有兩個(gè)人的生日在同一天的概率是多少?
此題屬于全排列問題,需要反向思考,寫出公式之后直接輸入到python中計(jì)算
3.2 大樂透問題
大樂透的玩法是這樣的,從35個(gè)紅球中選擇5個(gè),從12個(gè)紅球中選擇2個(gè),如果全中,那就中一等獎(jiǎng)。那么請問,中一等獎(jiǎng)的概率是多少?
此題屬于組合問題,中獎(jiǎng)的可能性為一種,因此分子為1,分母為所有的組合情況。
有1、2、3、4個(gè)數(shù)字,能組成多少個(gè)互不相同且無重復(fù)數(shù)字的三位數(shù)?具體有哪些數(shù)字
方法一:for循環(huán)+集合去重復(fù)項(xiàng)
方法二:內(nèi)置函數(shù)itertools
排列組合迭代器:
itertools.product p,q…[repeat=l]笛卡爾積,相當(dāng)于嵌套的for
itertools.permutation p[,r]長度為r元組,所有可能得排列,無重復(fù)元素
itertools.combination p,r 長度r元組,有序,無重復(fù)元素
itertools.combinaton_with_replacement p,r 長度人員組,有序,元素可重復(fù)
舉例
模塊其他函數(shù):