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 个字母且所有字母只出现一次的单词,否则您的代码将无法找到它们。
此函数用于比较从字典文件导入的所有 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 个字母且所有字母只出现一次的单词,否则您的代码将无法找到它们。