Python - 将 127,000 多个单词导入列表,但函数仅返回部分结果

Python - importing 127,000+ words to a list, but function only returning partial results

此函数用于比较从字典文件导入的所有 127,000 多个单词与用户输入的长度。然后它应该 return 等于该长度的单词数量。它确实在一定程度上做到了这一点。

如果我输入“15”,它 return 就是“0”。 如果我输入“4”,它 return 就是“3078”。

我肯定有些单词的长度是 15 个字符,但它 return 无论如何都是“0”。 我还应该提到,如果我输入任何大于 15 的值,当存在​​大于 15 的单词时,结果仍然为 0。

try:
    dictionary = open("dictionary.txt")
except:
    print("Dictionary not found")
    exit()


def reduceDict():
    first_list = []

    for line in dictionary:
       line = line.rstrip()
       if len(line) == word_length:
           for letter in line:
               if len([ln for ln in line if line.count(ln) > 1]) == 0:
                   if first_list.count(line) < 1:
                       first_list.append(line)
               else:
                    continue
    if showTotal == 'y':
       print('|| The possible words remaing are: ||\n ',len(first_list))

我的阅读:

if len([ln for ln in line if line.count(ln) > 1]) == 0:

问题中的单词不能有任何重复的字母,这可以解释为什么找不到单词——一旦达到 15 个,重复的字母就很常见了。由于解释中没有提到这个要求,如果我们删除那么我们可以写:

def reduceDict(word_length, showTotal):
    first_list = []

    for line in dictionary:
        line = line.rstrip()

        if len(line) == word_length:
            if line not in first_list:
                first_list.append(line)

    if showTotal:
        print('The number of words of length {} is {}'.format(word_length, len(first_list)))
        print(first_list)

try:
    dictionary = open("dictionary.txt")
except FileNotFoundError:
    exit("Dictionary not found")

reduceDict(15, True)

从我的 Unix words 文件中找到大约 40 个单词。如果我们想放回唯一字母要求:

import re

def reduceDict(word_length, showTotal):
    first_list = []

    for line in dictionary:
        line = line.rstrip()

        if len(line) == word_length and not re.search(r"(.).*", line):
            if line not in first_list:
                first_list.append(line)

    if showTotal:
        print('The number of words of length {} is {}'.format(word_length, len(first_list)))
        print(first_list)

正如人们所期望的那样,它开始返回大约 13 个字母的 0 个结果。

在你的代码中,你不需要这一行 -

for letter in line:

在您的列表理解中,如果您打算遍历 line 中的所有单词,请使用此 -

if len([ln for ln in line.split() if line.count(ln) > 1]) == 0:

在您编写列表推导式循环的代码时,循环遍历每个字符并检查该字符是否在 line 中出现多次。这样,如果您的文件包含 chemotherapeutic,它将不会被添加到列表 first_list,因为有些字母出现了多次。因此,除非您的文件包含超过 14 个字母且所有字母只出现一次的单词,否则您的代码将无法找到它们。