[記錄] 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)
留言
張貼留言