python 實現組合以及全組合

2021-08-21 04:56:28 字數 2096 閱讀 9369

數學中的組合概念是:從 n 個元素中不放回的取出 m 個元素組成乙個組合(不考慮順序),組合數是所有可能產生的組合的種數

本列通過 26 個小寫字母來演示

組合的**如下:

def combination_k(s, k):

'''字串 s 中選取 k(0 <= k <= len(s)) 個元素,進行組合,以列表的形式返回所有可能的組合

s --> 輸入的字串

k --> 選取的元素的個數

測試結果如下:

combination_k('abc', 2) >>> ['ab', 'ac', 'bc']

combination_k('c', 2)   >>>

combination_k('c', 2) 的遞迴內部解釋如下:

--> combination_k('c', 2)

--> for i in combination_k('', 1):

c + i

# 由於 combination_k('', 1) 的返回結果是乙個空列表,這 for 迴圈遍歷不會被執行,所以返回初始設定的值

'''# recursive basis

if k == 0: return ['']

# recursive chain

subletters =

# 此處涉及到乙個 python 遍歷迴圈的特點:當遍歷的物件為空(列表,字串...)時,迴圈不會被執行,range(0) 也是一樣

for i in range(len(s)):

for letter in combination_k(s[i+1:], k-1):

subletters += [s[i] + letter]

return subletters

在編寫乙個遍歷呼叫 combination_k 函式獲取全組合

def combination_all(s):

'''本函式配合 combination_k 函式實現全組合

s --> 組合元素的樣本

以列表的形式返回所有長度可能的組合

測試如下:

combination_all('abc') >>> ['a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']

'''comb_list =

# 通過 for 迴圈呼叫 combination_k(s, k) 獲取不同 k 值下的所有組合

for i in range(1, len(s)+1):

comb_list += combination_k(s, i)

return comb_list

定義主函式後呼叫

def main():

letter = 'abcdefghijklmnopqrstuvwxyz'

print('組合及全組合計算器')

print('組合總樣本:' + letter)

mode = eval(input('請選擇執行模式:1 代表『組合』; 2 代表『全組合』:'))

if mode == 1:

print('您選擇的是組合模式:')

length = eval(input('請輸入組合元素樣本的長度:'))

letter_numbers = eval(input('請輸入入選組合元素的個數:'))

print('您選擇的組合樣本是:' + letter[:length] + ',參與組合的元素個數是:' + letter_numbers)

c_k = combination_k(letter[:length], letter_numbers)

print(c_k)

elif mode == 2:

print('您選擇的是全組合模式:')

length = eval(input('請輸入組合元素樣本的長度:'))

print('您選擇的組合樣本是:' + letter[:length])

c_a = combination_all(letter[:length])

print(c_a)

if __name__ == '__main__': main()

Java實現全組合

abs 的all combination is abc,a,b,c,ab,ac,bc 2 n 1次 public class combination system.out.println system.out.println result num is nbit 1 public static vo...

python實現陣列的全組合以及全排列

全排列與全組合全排列的遞迴 python實現 全排列 全排列 defswap nums,i,j temp nums i nums i nums j nums j temp 遞迴實現 defpermution nums,start,end if start end print nums else fo...

遞迴學習 組合 全組合排列

sample input 1 2 3 sample output include using namespace std const int len 10 int n int mat len int result len bool used len 初始值為false,表示都沒有使用過 void s...