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

Python实现从单词列表中找出可由4个公共字母组成的单词

不用正则实现找出指定公共字母组成的单词组

嘿,这个需求很好实现!不用正则完全能搞定,我给你梳理个清晰的思路和代码示例:

核心思路

我们要找的是所有字母都属于某4个公共字母集合的单词,说白了就是:单词的字母集合是这个4字母集合的子集。基于这个逻辑,步骤大概是这样:

  1. 把每个单词转换成小写字母的集合(自动去重,还能忽略大小写差异);
  2. 生成所有可能的4字母组合集合;
  3. 对每个4字母集合,筛选出所有字母集合是它子集的单词;
  4. 把至少包含2个单词的分组保留下来,就是我们要的结果。

代码实现

import itertools

letter = 4
word = "Demo Deer Deep Deck Cere Reep Creep Creeps"
split_word = word.split()

# 把每个单词映射为它的小写字母集合
word_char_sets = {w: set(w.lower()) for w in split_word}

# 收集所有出现过的字母,去重
all_unique_chars = set()
for chars in word_char_sets.values():
    all_unique_chars.update(chars)

# 生成所有长度为letter的字母组合(转为集合方便后续判断)
candidate_char_sets = [set(combo) for combo in itertools.combinations(all_unique_chars, letter)]

# 筛选符合条件的单词组
result_groups = {}
for candidate in candidate_char_sets:
    # 找出所有字母集合是候选子集的单词
    matched_words = [w for w, chars in word_char_sets.items() if chars.issubset(candidate)]
    # 只保留至少有2个单词的分组
    if len(matched_words) >= 2:
        # 把候选字母排序后转成字符串,作为分组的键(方便查看)
        group_key = ''.join(sorted(candidate))
        result_groups[group_key] = matched_words

# 输出结果
for key, words in result_groups.items():
    print(f"公共字母组合: {key}")
    print(f"对应的单词: {', '.join(words)}")
    print("---")

代码说明

  • set(w.lower()):快速把单词转成去重的小写字母集合,比如Deer会变成{'d','e','r'},Creep变成{'c','r','e','p'};
  • itertools.combinations:生成所有可能的4字母组合,确保我们不会漏掉任何潜在的公共字母组;
  • chars.issubset(candidate):这是核心判断——检查单词的所有字母是不是都来自候选的4字母集合,完全符合你“可由这4个字母组成”的需求;
  • 最后我们只保留至少有2个单词的分组,避免出现单个单词的无效组。

运行这段代码后,你会得到符合预期的结果:

公共字母组合: depr
对应的单词: Deer, Deep, Reep

公共字母组合: cepr
对应的单词: Cere, Reep, Creep

如果你需要调整规则,比如要求分组至少有3个单词,只需要把len(matched_words) >= 2改成>=3就行,非常灵活。

内容的提问来源于stack exchange,提问作者NoviceMe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:14:59