在单词列表中找到共同的字母

2024-09-26 18:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手这就是我要实现的目标:

letter = 4
word = "Demo Deer Deep Deck Cere Reep Creep Creeps"
split_word = word.split()   

例如,我可以通过四个常见的单词组成:

^{pr2}$

在python中有没有不使用regex的简单方法来实现这一点。在


Tags: 目标demo单词wordsplitdeckdeepletter
2条回答

我想你需要分几步来完成。在

首先,你需要弄清楚你的字母集是什么。你可以使用整个字母表,但如果你能避免的话,我建议你不要这样做。我试着用一套:

letter_pool = set([ltr.lower() for ltr in word if ltr != " "])

接下来,您需要迭代池中四个字母的所有组合,并检查哪些单词可以用它们组成。这就是为什么最好不要使用整个字母表;这是很多组合。在下面的示例中,我将结果存储在由字母组合键控的字典中,但是您可以根据需要修改它。在

^{pr2}$

注意for-else语法;这意味着如果循环没有中断,else子句中的代码将执行。基本上,对于给定的字母组合,此代码检查每个单词并确定它是否仅由这些字母组成。如果是,它会存储这些信息。如果一个给定的组合不构成任何单词,那么它在字典中的条目将被删除(以节省内存)。请注意,这是一个相当幼稚的解决方案,不能很好地扩展。在

如果要打印结果,可以执行以下操作:

for key in results:
   print ", ".join(results[key]), " [ formed by "+str(key)+"]"

您可以使用setsitertools.combinations来实现这一点:

word = "Demo Deer Deep Deck Cere Reep Creep Creeps"
split_word = word.split() 

from itertools import combinations

letters = {s for it in split_word for s in it.lower()}
out = dict()
for n in range(len(letters)):
    out[n] = {''.join(letters_subset): [word
                                        for word in split_word
                                        if set(word.lower()).issubset(letters_subset)]
          for letters_subset in combinations(letters, n)}
    out[n] = {k: v for k, v in out[n].items() if len(v) > 0}

# Print output
for n, d in out.items():
    for k, v in d.items():
        print('{}:\t{}\t{}'.format(n, k, v))

相关问题 更多 >

    热门问题