当#validCandidateList += word
保持注释时,程序运行正常。当取消注释该行时,程序将开始反复打印一些重复的行。
2.如您所见,sorted(set(eWord))
已排序,因此
例如,如果我输入“ dog”或“ good”,它将创建相同的排序列表
字母-['d', 'g', 'o']
,但程序不会打印
输入为good
时,将单词dog
删除,即使您可以
通过输入两个词来确认字典中是否存在这两个词
在单个程序中,用空格隔开,或输入以下内容之一
对不起,我只需要对单词应用.lowercase()即可。字典也包含一些大写字母。
请帮忙。
import os
cwd = os.path.dirname(os.path.abspath(__file__))
fname = "\\dictionary.txt"
file = open(cwd + fname, "r")
readFile = file.read()
dictionary = readFile.split() #list type variable with more than 400 000 words.
input = input("Input your list of words, separated by spaces: ")
inputList = input.split()
validCandidateList = inputList
for eWord in dictionary:
for word in inputList:
if sorted(set(eWord)) == sorted(set(word)):
print(word, ": ",eWord)
#validCandidateList += word
print(validCandidateList)
最佳答案
我找到了!
您的行在这里:
validCandidateList = inputList
不会像您期望的那样将
inputList
的内容复制到名为validCandidateList
的新变量中,它只是链接两个变量,因此当您在循环中更改validCandidateList
时,它也会同时更改inputList
正在尝试循环。更改您要遍历的列表会在Python中引起大问题(请勿这样做)。因此,要解决此问题,您实际上需要像这样将inputList
的内容复制到validCandidateList
中:validCandidateList = inputList[:]
另外,如果您使用的是Python 3,则可以使用
copy()
函数validCandidateList = inputList.copy()
对于您正在做的事情,这看起来更明显,但是两者都很好:)