Python实现字符相同单词分组:结果不符问题求助
问题分析
你的代码存在几个核心问题,导致输出不符合预期:
- 三重嵌套循环只检查了三个数组同时存在的变位词组合,完全漏掉了仅在单个或两个数组里的变位词(比如
asd、eqw和qwe) - 条件中的
word_1 != word_2 != word_3逻辑错误,变位词的判断只需要看字符排序后是否一致,不需要强制单词本身不等 - 错误地将三个单词拼接成字符串存入列表,而不是把每个单词作为独立元素归入对应分组
解决方案
正确的思路是先把所有数组的单词合并,再通过字符排序后的结果作为标识,将变位词分组。具体步骤如下:
- 合并所有输入数组的单词到一个统一列表
- 用字典存储分组:键为「单词字符排序后的元组」(列表不可哈希,不能做字典键,元组可以),值为对应变位词的列表
- 遍历每个单词,将其归入对应键的分组中
- 最后输出字典的所有值,就是按变位词分组的结果
修改后的代码
oe1 = ["abc", "def"] oe2 = ["asd", "cab", "fed", "eqw"] oe3 = ["qwe", "efd", "bca"] # 合并所有数组的单词 all_words = oe1 + oe2 + oe3 # 创建分组字典 anagram_groups = {} for word in all_words: # 生成排序后的字符元组作为分组键 key = tuple(sorted(word)) # 如果键不存在,初始化空列表;否则追加当前单词 if key not in anagram_groups: anagram_groups[key] = [] anagram_groups[key].append(word) # 输出所有分组 for group in anagram_groups.values(): print(group)
输出结果
运行上述代码后,输出和你的预期一致:
['abc', 'cab', 'bca'] ['def', 'fed', 'efd'] ['asd'] ['eqw', 'qwe']
补充说明
- 这种方法的时间复杂度主要由排序操作决定,每个单词排序的时间是O(k log k),k是单词长度,整体效率远高于你的三重循环
- 分组结果的顺序可能和示例略有差异,但符合题目「数组或元素顺序无关紧要」的要求
- 如果需要对分组或组内元素排序,可以在输出前对
anagram_groups.values()或每个子列表执行sorted()操作
内容的提问来源于stack exchange,提问作者Anis Indah
相关产品推荐
相关产品推荐

