Python:找到可能由7个随机字母组成的单词

时间:2019-05-28 23:04:15

标签: python

我正在尝试用Python构建一个程序,给定一个单词列表和一个字母列表,它们可以确定字母列表中的7个随机字母可以组成哪些单词。

我有代码显示列表中 all 个可能的单词,列表中的所有字母都是可能的,但是我需要更改它以从列表中选择7个随机字母,然后查看哪个列表中的单词可能会与所选字母组合在一起。

以下是使用所有字母并确定使用哪些字母的代码:

from collections import Counter

words = ['hi','how','are','you']
letters = ['h','i','b', 'a','r','e', 'l', 'y', 'o', 'u', 'x', 'b'] 

# For every word
for word in words: 

    # Convert the word into a dictionary
    dict = Counter(word) 
    flag = 1

    # For every letter in that word
    for key in dict.keys():

        # If that letter is not in the list of available letters, set the flag to 0
        if key not in letters: 
            flag = 0

    # If the flag remains 1 (meaning all letters in the word are in the letters list), then print the word.
    if flag == 1:
        print(word)

现在,它可以正确打印所有字母的可能单词,但我希望它从列表中选择7个随机字母并打印可能的单词。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

Random.sample():

import random as rnd
letters = ['h','i','b', 'a','r','e', 'l', 'y', 'o', 'u', 'x', 'b'] 
hand = rnd.sample(letters, 7)

然后继续操作。

答案 1 :(得分:0)

您可以使用集合中的计数器来检查是否可以使每个单词都脱离字母:

words   = ['hi','how','are','you']
letters = ['h','i','b', 'a','r','e', 'l', 'y', 'o', 'u', 'x', 'b']

from random      import sample
from collections import Counter

letterCounts  = Counter(sevenLetters)
wordCounts    = { word:Counter(word) for word in words }

sevenLetters  = sample(letters,7)
possibleWords = [ word for word,wc in wordCounts.items() if not wc-letterCounts ]

print(sevenLetters,possibleWords) 
# ['x', 'u', 'h', 'b', 'a', 'i', 'b'] ['hi']

注意:使用Counter()涵盖了多次需要同一字母(例如婴儿)的情况。