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

如何检测两字符串是否存在共同单词?Python实现问询

检测两个字符串的共同单词匹配

嘿,这个需求其实挺常见的,我给你整理几个实用的Python实现方案,按需选就行:

基础实现(快速直观)

最直接的思路是把两个字符串拆成单词集合,然后检查它们的交集是否非空——集合的交集操作效率很高,非常适合这种场景。

注意:这里转成小写是为了避免大小写差异导致的匹配失败,比如"Basketball"和"basketball"会被视为同一个单词,如果你的需求是严格区分大小写,去掉.lower()即可

代码示例:

def has_common_word(str1, str2):
    # 拆分字符串为单词集合,同时转小写统一格式
    words1 = set(str1.lower().split())
    words2 = set(str2.lower().split())
    # 检查交集是否不为空,空集合转布尔值是False,非空则为True
    return bool(words1 & words2)

# 测试你的示例
str_a = "I am playing basketball everyday"
str_b = "basketball is the worst game ever"
print(has_common_word(str_a, str_b))  # 输出: True

处理标点符号的优化版

上面的基础版有个小问题:如果单词后面跟着标点(比如"basketball,"),split()会把它当成和"basketball"完全不同的单词。如果要处理这种场景,我们可以先移除字符串里的标点符号再拆分:

import string

def has_common_word_with_punctuation_handling(str1, str2):
    # 创建标点符号移除器
    translator = str.maketrans('', '', string.punctuation)
    # 移除标点、转小写、拆分单词
    words1 = set(str1.lower().translate(translator).split())
    words2 = set(str2.lower().translate(translator).split())
    return bool(words1 & words2)

# 测试带标点的场景
str_c = "I love basketball, it's my favorite sport!"
str_d = "basketball is such a boring game"
print(has_common_word_with_punctuation_handling(str_c, str_d))  # 输出: True

内存友好版(适合大文本)

如果你要处理非常大的字符串(比如长篇文档、日志文件),用集合可能会占用较多内存。这时候可以用“提前存第一个字符串的单词集合,遍历第二个字符串的单词时逐个检查”的方式,一旦找到匹配就立即返回,不用处理完整个字符串:

import string

def has_common_word_memory_friendly(str1, str2):
    translator = str.maketrans('', '', string.punctuation)
    # 先处理第一个字符串,生成去重的单词集合(集合的查询速度是O(1))
    words1 = set(str1.lower().translate(translator).split())
    # 遍历第二个字符串的每个单词,找到匹配就立刻返回True
    for word in str2.lower().translate(translator).split():
        if word in words1:
            return True
    # 遍历完没找到匹配,返回False
    return False

这个版本在大文本场景下会更快更省内存,因为不需要把两个大字符串的所有单词都加载到内存里。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:38