Python 哪些词典条目可以进入其他词典

Python 哪些词典条目可以进入其他词典,python,compare,Python,Compare,我正在编写一个python脚本,到目前为止看起来是这样的: import sys fname = sys.argv[1] letters = str.lower(sys.argv[2]) letaray = list(letters) charcount = int(letters.count("")) - 1 lines = tuple(open(fname, 'r')) wordlist = map(str.lower,open(fname).read().splitlines()) sco

我正在编写一个python脚本,到目前为止看起来是这样的:

import sys
fname = sys.argv[1]
letters = str.lower(sys.argv[2])
letaray = list(letters)
charcount = int(letters.count("")) - 1
lines = tuple(open(fname, 'r'))
wordlist = map(str.lower,open(fname).read().splitlines())
scores = {"a": 1, "c": 3, "b": 3, "e": 1, "d": 2, "g": 2, "f": 4, "i": 1, "h": 4, "k": 5, "j": 8, "m": 3, "l": 1, "o": 1, "n": 1, "q": 10, "p": 3, "s": 1, "r": 1, "u": 1, "t": 1, "w": 4, "v": 4, "y": 4, "x": 8, "z": 10}
# char count
if charcount != 7:
    print "Not 7 characters"
    exit()
def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1
file_len(fname)
该程序由以下人员运行:

python main.py wordlist.txt XXXXXXX
其中,
X
是拼字板的字母,例如:
AGJBTGE

然后将这些字母解析为如下数组:

['a', 'g', 'j', 'b', 't', 'g', 'e']
然后文本文件被逐行抛出到变量
wordlist

如何创建另一个列表,其中包含可以由字母组成的所有可能的单词组合? 例如:
age、jab

注意:如果只有1个
G
,则只能使用1个
G
,如果有2个
G
,则只能使用2个,依此类推。我可能没有提供所需的一切,请告诉我

from itertools import permutations

string ='AGJBTGE'

string = string.lower()

for r in range(1,len(string)+1):
    for word in permutations(string,r):
        print(''.join(word))

r是排列函数的选项输入,用于定义输出的长度。
您可以添加if语句来检查单词。

您可以使用itertools中的组合,然后使用chain将所有组合合并到一个列表中

In [1]: from itertools import combinations, chain

In [2]: word = "AGJBTGE"

In [3]: word_combos = [list(combinations(word, r)) for r in range(1, len(word)+1)]

In [4]: word_combos_chained = [''.join(wl) for wl in list(chain(*word_combos))]

In [5]: word_combos_chained[25:35]
Out[5]: ['TG', 'TE', 'GE', 'AGJ', 'AGB', 'AGT', 'AGG', 'AGE', 'AJB', 'AJT']

为此,您需要一个单词库和一个函数来比较给定的
字符列表
是否包含在另一个字符列表中

既然已经存在于S.O上,我不会回答这个问题,但是,我会在获取和处理一些单词方面给你一些帮助

您可以在web上的许多地方(如果您使用Unix,也可以在您的计算机上)或使用您自己的一些文件(如
wordlist.txt
),以下函数应适用于任何新行分隔的文件

对于本演示,我使用
/usr/share/dict/british english
作为包含以下内容的文件:

# enter the file name you want to use e.x wordlist.txt
filename = "/usr/share/dict/british-english"
由于这些文件通常很大,您可以使用此生成器函数
生成可处理的单词(不必担心生成器是什么,现在就使用它们:-):

假设您有一个字符列表:

l = list("HelloWorld")
然后,您可以遍历此生成器,并对每个单词进行比较和计算
word
是否包含在
l
中:

valid_words = []
for word in yield_words():
    # define a contains function
    # that returns True if l contains word
    if contains(l, word):
        valid_words.append(word)

这应该是一个很好的起点,尽管我愿意提供帮助,但请使用我添加的链接,找到一组好的(附加)单词,以及一个可以比较列表的函数,然后您就可以开始了。

您发布的代码只是数据的加载。到目前为止,为了实际解决你的问题,你尝试了什么?我不知道该尝试什么,这就是为什么我要问@有很多方法可以解决这个问题,我认为提出一种方法是练习的重点(否则会列出一种具体的方法)。你有没有找到一种方法来测试一个特定的单词是否符合你的规则?您可能应该尝试将您的问题与此隔离,比如编写一个函数
def is\u word\u good(word,字母):
,并使其单独工作。然后在整个程序中引入它。函数的内部是什么?是否有一个比较模块或类似的东西@Spectrasnop,你得想个办法。如果你被卡住了,一个很好的方法就是拿一张纸,写下一个单词和一组字母,然后找出这个单词是否有效。当你这样做的时候,试着检查你是如何进行的,并大声说出来,比如“我在这里寻找这封信”,“我划掉了这封信”,等等。如果你做得好,你应该得到一个用英语写的算法。如果你还不精通Python,那么将英语翻译成Python比直接用Python编写要容易得多。这并不能解决他的问题,这是关于根据指定字母验证一组单词的问题。@spectras如果OP没有标准,我们总是可以获取有效的英语单词作为验证。并生成所有排列?这就是阶乘复杂性。写几封信,你的计划就需要几年才能完成。例如,字符串
ABCDEFGHIJKLMNO
将生成略多于13070亿次的排列。@spectras同意。我也在等待更好的答案。用另一种方法做会更有效率。检查一个特定的单词是否通过并不难(你可以计算单词中每个字母的出现次数,如果单词的所有字母最多出现在输入字母中的次数,那么单词就会通过)。那么,我该如何针对我的文本文件运行单词组合链接[开始:结束]的整个结果呢,逐行回答?这是一个很好的家庭作业问题的答案。获取一些样板文件,同时为关键部分提供良好的提示和相关链接。我认为这比我们经常看到的解决方案要好得多+1.猜猜谁对你在这个问题上的评论投了赞成票:-)。无论哪种方式,如果OP真的想学习的话,他就应该尝试这样做。我们只希望如果他不这样做,其他有类似问题的人可能会碰到这个问题。contains的内容应该是什么?@SkylerSpaeth,我为此明确链接了另一个问题。没关系,链接的问题有contains函数的答案。研究它并尝试将其集成到您的程序中。如果您遇到任何其他问题,并且在StackOverflow上找不到类似的问题,请返回并创建另一个问题。:-)
valid_words = []
for word in yield_words():
    # define a contains function
    # that returns True if l contains word
    if contains(l, word):
        valid_words.append(word)