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

Python如何判断字符串是否仅由指定单词列表中的单词构成

问题说明

给定合法单词列表:

words = ['ABC', 'CDE', 'EFG']

需要实现校验逻辑:判断输入字符串是否仅由列表内的单词(单词间以空格分隔)组成,满足以下校验规则:

  • 字符串拆分后的每个单词都必须属于上述合法单词列表
  • 单词可以重复使用,字符串包含的单词总个数不设限
  • 示例:'EFG CDE'、'EFG EFG CDE'、'CDE CDE CDE CDE' 都应返回True

原有实现通过itertools.permutations生成固定长度(2个或3个单词)、单词不重复的排列组合,再判断目标字符串是否在枚举结果中,只能覆盖极少量场景,无法适配单词重复、单词数任意的合法字符串。本质上合法字符串的可能数量是无限的,枚举思路从根源上就不可行。

正确实现

核心逻辑非常简单:不需要提前枚举任何合法组合,直接将待校验字符串按空格拆分为单词片段,逐个校验每个片段是否在合法单词集合内即可,时间复杂度低,适配任意长度的输入。

def check_valid(input_str, valid_words):
    # 转为集合提升成员判断效率
    valid_set = set(valid_words)
    # split()不传参时自动忽略前后空格、连续空格,拆分出所有单词片段
    parts = input_str.split()
    # 所有片段都在合法集合中则返回True
    return all(part in valid_set for part in parts)


# 测试验证
words = ['ABC', 'CDE', 'EFG']
print(check_valid('EFG CDE', words)) # True
print(check_valid('EFG EFG CDE', words)) # True
print(check_valid('CDE CDE CDE CDE', words)) # True
print(check_valid('ABC XYZ', words)) # False,存在不在列表内的XYZ
print(check_valid('  ABC   CDE  ', words)) # True,自动忽略多余空格

补充:如果业务场景要求多个单词间只能有单个空格、不允许存在前后空格,可以把拆分逻辑换成input_str.split(' '),再额外判断拆分结果中是否存在空片段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:18:26