[英]All possible combinations of a word - Python
我正在制作一個程序,您可以在其中插入一些字母,然后輸出是這些字母的所有可能組合。
例如:如果輸入是“ABC”,則輸出應該是“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”、“ACB”等等。 .
最后,我的想法是將所有這些組合放在一個集合中,以便它可以與另一個包含某個英語單詞詞典的集合相交,該交集是理想的輸出
到目前為止,我的腳本是這樣的:
import random
p = list(raw_input('Insert some letters: '))
p2 = []
p3 = []
for j in range((len(p))):
p2.append(p[j])
for i in range(len(p)):
a = random.sample(p2,len(p))
p3.append(str("".join(a)))
print p3[]
顯然,有一些錯誤並且不完整。 你能幫我完成或告訴我應該走哪條路嗎? 謝謝閱讀
如果您不在乎順序,那么您正在尋找組合。 您可以為此使用itertools.combination
:
import itertools
items = 'ABC'
for i in range(len(items)+1):
for combination in itertools.combinations('ABC', i):
print(combination)
列表理解版本:
[combination for i in range(len(items)+1) for combination in itertools.combinations('ABC', i)]
我喜歡把這樣的東西放到一個很好的生成器函數中,例如:
from itertools import permutations
def words(letters):
for n in range(1, len(letters)+1):
yield from map(''.join, permutations(letters, n))
然后可以方便地使用,例如:
for word in words('ABC'):
print(word)
或者因為你想要它作為一個集合:
>>> set(words('ABC'))
{'BA', 'BCA', 'CB', 'A', 'AC', 'AB', 'C', 'BC', 'CA', 'ABC', 'CBA', 'B', 'BAC', 'CAB', 'ACB'}
但是,最好不要生成這個詞集,而是遍歷這些英語單詞並檢查每個單詞是否可以由給定的字母組成。 取決於哪個集合更大,這取決於輸入的字母。
可惜我不能對 Stefan 做 +1。 我編輯了 Stefan 的天才答案(為了我的目的):
from itertools import permutations
def words(letters):
yield from map(''.join, permutations(letters, len(letters)))
result = set()
for word in words('algorithm'):
result.add(word)
print(f' There are {len(result)} combinations')
for i, each in enumerate(result):
if i%5 == 0 and input(''):
break
print(each)
它使全長排列。
對於所有小字母組合 <=8 位數字:
words = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
for a in words:
print(a)
for b in words:
print(a,b)
for c in words:
print(a,b,c)
for d in words:
print(a,b,c,d)
for e in words:
print(a,b,c,d,e)
for f in words:
print(a,b,c,d,e,f)
for g in words:
print(a,b,c,d,e,f,g)
for h in words:
print(a,b,c,d,e,f,g,h)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.