You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现字符相同单词分组:结果不符问题求助

问题分析

你的代码存在几个核心问题,导致输出不符合预期:

  • 三重嵌套循环只检查了三个数组同时存在的变位词组合,完全漏掉了仅在单个或两个数组里的变位词(比如asd、eqw和qwe)
  • 条件中的word_1 != word_2 != word_3逻辑错误,变位词的判断只需要看字符排序后是否一致,不需要强制单词本身不等
  • 错误地将三个单词拼接成字符串存入列表,而不是把每个单词作为独立元素归入对应分组
解决方案

正确的思路是先把所有数组的单词合并,再通过字符排序后的结果作为标识,将变位词分组。具体步骤如下:

  1. 合并所有输入数组的单词到一个统一列表
  2. 用字典存储分组:键为「单词字符排序后的元组」(列表不可哈希,不能做字典键,元组可以),值为对应变位词的列表
  3. 遍历每个单词,将其归入对应键的分组中
  4. 最后输出字典的所有值,就是按变位词分组的结果
修改后的代码
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:31:15