簡體   English   中英

一個單詞的所有可能組合 - Python

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM