首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我试图弄清楚为什么我的anagram函数得到错误的输出。

我试图弄清楚为什么我的anagram函数得到错误的输出。
EN

Stack Overflow用户
提问于 2020-04-27 02:53:01
回答 2查看 77关注 0票数 0

该参数是一个单词列表。期望输出一组字谜的列表。

代码语言:javascript
复制
def anagrams(lst):
    d = {}
    while len(lst) > 0:
        pop = lst.pop()
        d[pop] = d.get(pop, [])
        d[pop].append(pop)
        for word in lst:
            perm = [''.join(p) for p in permutations(pop)]
            if word in perm:
                d[pop].append(word)
                lst.remove(word)
    anagram = d.values()
    return list(anagram)

print(anagrams(['eat', 'ate', 'done', 'tea', 'soup', 'node']))

-控制台输出.(输出错误)

代码语言:javascript
复制
 [['node', 'done'], ['soup'], ['tea', 'eat'], ['ate']]

--期望产出

代码语言:javascript
复制
 [['eat', 'ate', 'tea], ['done', 'node'], ['soup']]

当pop = 'tea‘在while循环中时,我尝试了我的伪代码。

代码语言:javascript
复制
pop = ‘tea’
lst = [‘eat’,’ate’]

for ‘eat’ in lst:
    perm = perm of [tea]
    if eat in perm (true)
        d[tea].append(‘eat’)  # d[tea] = [tea, eat]
        lst = [‘ate’]

for ‘ate’ in lst:
    perm = perm of [tea]
    if ‘ate’ in perm: (should be yes)
        d[tea].append(ate) -> d[tea] = [tea, eat, ate]
        lst.remove['ate'] -> lst = [] 

,这不是的情况

EN

回答 2

Stack Overflow用户

发布于 2020-04-27 03:15:23

我认为你有正确的想法,但你让这有点太难了。您可以创建字典,因此键是单词的排序字母。这将使ateeat最终位于键aet下的同一个位置。这样就避免了计算排列,它只是几行,而且速度很快:

代码语言:javascript
复制
from collections import defaultdict

def anagrams(words):
    lookup = defaultdict(list)
    for word in words:
        lookup["".join(sorted(word))].append(word)
    return list(lookup.values())


anagrams(['eat', 'ate', 'done', 'tea', 'soup', 'node'])
# [['eat', 'ate', 'tea'], ['done', 'node'], ['soup']]
票数 1
EN

Stack Overflow用户

发布于 2020-04-27 03:15:32

来自这里的简单解决方案

代码语言:javascript
复制
def anagrams(strs):
  result = {}
  for i in strs:
      x = "".join(sorted(i))
      result.setdefault(x, []).append(i)
  return list(result.values())

print(anagrams(['eat', 'ate', 'done', 'tea', 'soup', 'node']))

#Out: [['eat', 'ate', 'tea], ['done', 'node'], ['soup']]

解释

参考文献

为了解决这个问题,我们将遵循以下步骤 将结果定义为字符串数组中i的映射x := x和联接,如果x在结果中插入i,则按结果插入i作为列表返回结果的值

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61450996

复制
相关文章

相似问题

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