我是python的新手,这正是我想要实现的目标:
letter = 4
word = "Demo Deer Deep Deck Cere Reep Creep Creeps"
split_word = word.split()
我正在努力实现可以由任何4个常用字母形成的单词,例如:
Deer Deep Reep [these can be formed by 4 letters d, e, r & p]
Creep Cere Reep [these can be formed by 4 letters c, r, e, p]
在不使用正则表达式的情况下,有没有简单的方法在python中执行此操作。
答案 0 :(得分:0)
我认为你需要在几个步骤中完成这项工作。
首先,你需要弄清楚你的一组字母是什么。你可以使用整个字母表,但如果你能避免它,我建议不要这样做。我尝试使用一套:
letter_pool = set([ltr.lower() for ltr in word if ltr != " "])
接下来,您需要遍历池中四个字母的所有组合,并检查可以用它们形成哪些单词。这就是为什么最好不要使用整个字母表;这是很多组合。在下面的示例中,我将结果存储在由字母组合键入的字典中,但您可以根据需要对其进行修改。
results = {}
import itertools
for combination in itertools.combinations(letter_pool, letter): #in this case, letter=4
results[combination] = []
for wrd in split_word:
for character in wrd:
if character.lower() not in combination:
break
else:
results[combination].append(wrd)
if len(results[combination]) == 0:
del results[combination]
注意for-else
语法;这意味着如果循环没有中断,else
子句中的代码就会执行。基本上,对于给定的字母组合,此代码检查每个单词并确定它是否仅由这些字母组成。如果是,则存储该信息。如果给定的组合没有形成任何单词,则删除其在词典中的条目(以节省内存)。请注意,这是一个非常天真的解决方案,不会很好地扩展。
如果要打印结果,可以执行以下操作:
for key in results:
print ", ".join(results[key]), " [ formed by "+str(key)+"]"
答案 1 :(得分:0)
您可以使用sets和itertools.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))