我試圖生成詞彙量可以由只'A', 'B', 'C', 'D' or '*'
模式的不超過一個重複,人物可以重複任意次數,但美中不足的是,所產生的模式必須有至少一封信。生成列表中隨機元素的一個元素
我試着用隨機模塊,這是我來到最接近我想要什麼:
random.sample(set(vocabulary), 5)
Out[30]: ['A', 'D', '*', 'B', 'C']
理想我想看到的輸出,如:
A***
ABAB
ABC*
等
我該怎麼辦?
我試圖生成詞彙量可以由只'A', 'B', 'C', 'D' or '*'
模式的不超過一個重複,人物可以重複任意次數,但美中不足的是,所產生的模式必須有至少一封信。生成列表中隨機元素的一個元素
我試着用隨機模塊,這是我來到最接近我想要什麼:
random.sample(set(vocabulary), 5)
Out[30]: ['A', 'D', '*', 'B', 'C']
理想我想看到的輸出,如:
A***
ABAB
ABC*
等
我該怎麼辦?
其實你想讓你的列表元素的產品,你可以使用itertools.product
:
>>> from itertools import product
>>> voc=['A', 'B', 'C', 'D', '*']
>>> for pro in product(voc,repeat=5):
... print ''.join(pro)
*AAAA
*AAAB
*AAAC
*AAAD
*AAA*
*AABA
*AABB
*AABC
.
.
如果你只是想獲得平等的子集,你可以使用下面的列表理解的順風車,例如:
>>> voc=['C', 'D', '*']
>>> list(product(voc,repeat=3))
[('C', 'C', 'C'), ('C', 'C', 'D'), ('C', 'C', '*'), ('C', 'D', 'C'), ('C', 'D', 'D'), ('C', 'D', '*'), ('C', '*', 'C'), ('C', '*', 'D'), ('C', '*', '*'), ('D', 'C', 'C'), ('D', 'C', 'D'), ('D', 'C', '*'), ('D', 'D', 'C'), ('D', 'D', 'D'), ('D', 'D', '*'), ('D', '*', 'C'), ('D', '*', 'D'), ('D', '*', '*'), ('*', 'C', 'C'), ('*', 'C', 'D'), ('*', 'C', '*'), ('*', 'D', 'C'), ('*', 'D', 'D'), ('*', 'D', '*'), ('*', '*', 'C'), ('*', '*', 'D'), ('*', '*', '*')]
>>> list(i for i in product(voc,repeat=3)if len(set(i))>1)
[('C', 'C', 'D'), ('C', 'C', '*'), ('C', 'D', 'C'), ('C', 'D', 'D'), ('C', 'D', '*'), ('C', '*', 'C'), ('C', '*', 'D'), ('C', '*', '*'), ('D', 'C', 'C'), ('D', 'C', 'D'), ('D', 'C', '*'), ('D', 'D', 'C'), ('D', 'D', '*'), ('D', '*', 'C'), ('D', '*', 'D'), ('D', '*', '*'), ('*', 'C', 'C'), ('*', 'C', 'D'), ('*', 'C', '*'), ('*', 'D', 'C'), ('*', 'D', 'D'), ('*', 'D', '*'), ('*', '*', 'C'), ('*', '*', 'D')]
是的!這是我想要的行爲,但我也得到****,也許我可以用if檢查語句來消除它?還是有另一種方法巧妙地避免所有****模式? 謝謝,現在python的文檔有意義! – 2015-02-24 13:06:39
@sindhus歡迎!我添加鏈接!,這是最後的結果! 'itertools'模塊提供像'permutations'和'combinations'這樣的變體函數,你可以在wiki中找到所有這些函數! – Kasramvd 2015-02-24 13:09:14
chars=['A', 'B', 'C', 'D', '*']
s=""
L = len(chars)
for i in range(0,5):
s += chars[random.randrange(0,L)]
# now ensure that a character is present by setting a random character
s[random.randrange(0,5)] = chars[random.randrange(0,L-1)]
儘管此代碼塊可以回答這個問題,你總是應該爲它爲什麼這樣做一些解釋。 – 2015-02-24 14:48:05
字母/字母應該總是在一開始? – Carsten 2015-02-24 13:03:10
不,它可以在任何地方 – 2015-02-24 13:03:35