首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Anagram递归

Python Anagram递归
EN

Stack Overflow用户
提问于 2013-11-27 15:14:44
回答 1查看 2.7K关注 0票数 3

一段时间以来,我一直在使用这段代码。代码应该做的是获取一个输入的单词,从输入的单词中删除字母,然后生成一个单词的子集,并将其保存到一个数组中进行打印。我的问题是,这段代码将保存可以从输入的单词创建的每个单词。Ex input= spot output= top top stop pots pot等。

如果只打印stop、pots和stop就可以了。我已经做了一些调试打印,试图弄清楚程序实际在做什么,但都没有用。我会留下我已经注释掉的代码,因为这可能有助于了解我当时的心态/我想要什么。

我已经搜索了谷歌和这个网站,但它并没有真正的答案,我正在寻找。如果我是的话很抱歉给你带来麻烦

代码语言:javascript
复制
mylist = open('sortedwords.txt')
txt = mylist.read()
mylist = txt.split()
stuff = input('Type a word here: ')

def removeletters (word, Analysis):
    for char in range (len(Analysis)):
        if Analysis [char] in word:
             word = word.replace(Analysis[char],"",1)
    return word



def anagramSubset(word, textList):
    newWord = word
    for char in range(len(textList)):
        if textList[char] not in newWord: 
            return False
        else:
           newWord = newWord.replace(textList[char],"",1)
    return True

def anagram(word, textList):
    savedWords =[]
    for checkword in textList:  
        if len(word) == len(checkword) and anagramSubset(word, checkword):
            savedWords.append(checkword)
            print(checkword)

anagram(stuff, mylist)

我知道你们不是来帮我做工作的,但是我真的试过了,但是找不到一个导师。如果您能让我知道哪里出了问题,以及如何修复它,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2013-11-27 15:36:27

我看了看代码,想知道递归添加了什么?第一遍完成了所有的计算工作,然后递归添加了一些额外的堆栈帧,并改变了输出的打印方式。我是否错误地假设textList是从文件中的一行分割出来的有效单词的列表?

当我用一个特定的单词列表在本地运行它时,它得到了相同的效果(从这个意义上说,它找到了字母是子集的单词),但抖动更少:

代码语言:javascript
复制
def anagram(word, textList):
    savedWords = []
    for checkword in textList:
        if anagramSubset(word, checkword):
            savedWords.append(checkword)
    print(savedWords)

如果问题最终变成了你得到的单词的字母太少,你可以通过在添加单词之前检查单词的长度来解决这个问题:

代码语言:javascript
复制
if len(original_word) == len(checkword):
    savedWords.append(checkword)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20236082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档