什么字典项可以进入其他人

时间:2015-11-11 02:39:00

标签: 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())
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 {}等等。我可能没有提供所需的一切,请告诉我。

3 个答案:

答案 0 :(得分:2)

为了做到这一点,你需要一个单词和一个函数的语料库来比较给定的list个字符是否包含在另一个字符列表中。

由于S.O上已经存在Testing if a list contains another list with Python,我不会回答这个问题,但是,我会帮助你处理一些单词。

您可以在网络上的许多地方找到list of words(如果您使用的是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"

由于这些文件通常很大,你可以将这个生成器函数用于yield单词然后可以处理(不要担心发生器 ,现在就使用它们) :-)):

def yield_words():
    with open(filename, "r") as f:
        for word in f:
            yield word

所以,假设你有一个字符列表:

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)

这应该是一个很好的起点,尽管我愿意帮助,但是使用我添加的链接来找到一组好的(附加)单词以及一个可以用来比较列表的函数,那你就准备好了。

答案 1 :(得分:0)

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语句来检查单词。

答案 2 :(得分:0)

您可以使用itertools中的组合,然后使用链将所有组合添加到单个列表中

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']