如何使我的代码在整个列表中找到最大的七字组?

时间:2018-08-08 11:42:51

标签: python sorting anagram

嗨,我是Python的新手,我写了代码来查找按字母顺序排序的单词列表中最大的字谜组。问题是,它仅检查SIDE BY SIDE的两个单词是否是字谜。不要检查整个列表。 例如,如果列表为

['afd','daf','fad','htrw'] 

它将具有正确的输出:

['afd','daf','fad']

但是如果单独显示,例如:

['afd','bcf','daf','fad']

然后输出将是:

['daf','fad']

这是错误的。

这是我代码的一部分?

index=1
#PROBLEM HERE??
while index<len(arr):
    if areAnagrams(firstWord,arr[index]):
       groupLength+=1
       if groupLength>largestGroupSize:
           largestGroupIndexStart=groupIndex
           largestGroupSize=groupLength
           largestGroupIndexEnd=index

    else:
        firstWord=arr[index]
        groupLength=1
        groupIndex=index
    index+=1

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您可以使用一种与单词按字母顺序排序的事实无关的方法。

1 .//首先,您将所有彼此变位的单词组合在一起,以便有多个列表 2. /然后选择最长的列表

from collections import defaultdict

anagrams_list = ['afd','bcf','daf','fad']
anagrams_map = defaultdict(list)  # defaultdict creates a default type for each new dict attribute accessed: here list
for ana in anagrams_list:
    # each anagram has the same "signature": they are all made from the same letters
    # so we use this signature as the key
    # and associate to the key all the anarams versions we have
    anagrams_map[''.join(sorted(ana))].append(ana)
# Then we find the dict key which is associated with the longest list
max_key = max(anagrams_map, key= lambda x: len(set(anagrams_map[x])))
# We print it: it will already be alphabetically sorted as anagrams_list was sorted too
# if the initial list isn't sorted, you can sort the list here
print(anagrams_map[max_key])

注意事项(请参见IljaEverilä的评论): :这是一般情况的字谜,其中单词彼此重新排列(scar VS cars)。 如果您还希望将仅使用所有相同字母(hello VS hole)的单词进行分组,则可以使用冻结集作为唯一键:

anagrams_map[frozenset(ana)].append(ana)

代替

anagrams_map[''.join(sorted(ana))].append(ana)