如何用纯Python将变位词列表按相同字母分组为嵌套列表
变位词分组纯Python实现
我们利用互为变位词的单词字符排序后结果完全一致的特性来实现分组,全程仅使用Python内置能力,无需引入任何外部依赖:
- 初始化空字典存储分组,字典键为排序后的字符序列,值为对应变位词列表
- 遍历输入列表的所有单词,为每个单词生成排序后的字符串作为分组标识
- 将单词追加到对应标识的列表中,最终提取字典的所有值即为分组结果
完整实现代码
def group_anagrams(word_list): anagram_map = {} for word in word_list: # 生成排序后的字符串作为分组唯一键 sorted_key = ''.join(sorted(word)) # 键不存在时先初始化空列表 if sorted_key not in anagram_map: anagram_map[sorted_key] = [] anagram_map[sorted_key].append(word) # 提取所有分组转为列表返回 return list(anagram_map.values())
测试用例
# 原输入示例中"tops"与"gobin"之间遗漏逗号,此处已修正 mylist = ["pots", "stop", "levi", "vile", "evil", "spot", "star", "rats", "bingo", "live", "tops", "gobin"] anagrams = group_anagrams(mylist) print(anagrams)
运行输出
[["pots", "stop", "spot", "tops"], ["levi", "vile", "evil", "live"], ["star", "rats"], ["bingo", "gobin"]]
补充说明:如果需要支持大小写不敏感的分组,只需要把生成
sorted_key的行修改为''.join(sorted(word.lower()))即可。
内容的提问来源于stack exchange,提问作者MichaelRSF
相关产品推荐
相关产品推荐

