[記錄] python 排列組合程式

python 版本 2.7

使用流程:
輸⼊n (⼀一個陣列)
輸⼊k (做n取k的排列組合⽤用的值)
輸⼊mode (想要呈現的模式)
看到結果

模式mode有 
1. permutations (p): 列出n取k之所有排列
2. combinations (c): 列出n取k之所有組合
3. all permutations (ap): 列出從 n取1 到 n取n 之所有排列
4. all combinations (ac): 列出從 n取1 到 n取n 之所有組合
5. random permutations (rp): 隨機列出一組n取k之排列
6. random combinations (rc): 隨機列出一組n取k之組合


完整code:
# coding=UTF-8
# permutation C n 取 k
# input 一串 sequence
# output 1. 所有組合  2. 隨機發其中一組給你
# 白話文:實作排列組合當中的排列 n 個相異物拿出K個排成一列
import math
import random
import itertools

n = raw_input("Input n: ") #這裏接到的資料型態是 string
k = raw_input("Input k: ")

n = n.split(',') # 將input string n 轉換成 array
nl = len(n) # n array的長度

# 做一個防呆機制,如果要抽樣的 k 比array裡面的元素還要多,那就請使用者再輸入一次
while int(k) > nl:
print "Error input! k must smaller or equal to n:"
k = raw_input("Input k: ")
# 防呆機制 done

mode = raw_input("select mode: all permutations(ap), all combinations(ac), permutations(p), combination(c), random permutations(rp),random combination(rc):")
if mode == "p":
print list(itertools.permutations(n, int(k)))
li = list(itertools.permutations(n, int(k)))
elif mode == "c":
print list(itertools.combinations(n, int(k)))
li = list(itertools.combinations(n, int(k)))
elif mode == "ap":
for i in range(1, nl+1):
   print list(itertools.permutations(n, i))
elif mode == "ac":
for i in range(1, nl+1):
   print list(itertools.combinations(n, i))
elif mode == "rp":
li = list(itertools.permutations(n, int(k)))
print li[random.randrange(1,nl+1)]
elif mode == "rc":
li = list(itertools.combinations(n, int(k)))
print li[random.randrange(1,nl+1)]
# print random.randrange(1,nl+1)

留言

這個網誌中的熱門文章

[筆記] CRLF跟LF之區別 --- 隱形的 bug

[ML筆記] Batch Normalization

[筆記] 統計實習(1) SAS 基礎用法 (匯入資料並另存SAS新檔,SUBSTR,計算總和與平均,BMI)

[ML筆記] Ensemble - Bagging, Boosting & Stacking