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

如何检查传入名称的单词是否存在于对象艺人名称中?

解决方案

你的问题出在原代码的匹配逻辑上:name in self._artist是判断整个传入的name字符串是否是艺人名称的子串,但需求是至少有一个单词匹配,所以需要改成基于单词集合的交集检查。

修正后的完整代码

class Song:
    def __init__(self, artist, title):
        self._artist = artist
        self._title = title

    def check_artist(self, name):
        # 将艺人名称和传入的名称都拆分为单词集合
        artist_words = set(self._artist.split())
        name_words = set(name.split())
        # 检查两个集合是否有交集(即存在共同单词)
        return bool(artist_words & name_words)

song1 = Song("Lady Gaga and Bradley Cooper", "Shallow")

print("Testing check_artist with 'Lady Gaga and Bradley Cooper'") # True
assert(song1.check_artist("Lady Gaga and Bradley Cooper"))
print("Testing check_artist with 'Lord Gaga'") # True,艺人名称中存在其中一个单词
assert(song1.check_artist("Lord Gaga"))

逻辑说明

  1. 使用split()方法将字符串按空格拆分为单词列表,再转成集合(集合的交集操作效率更高)。
  2. 通过&运算符计算两个集合的交集,若交集不为空则说明存在匹配的单词,返回True,否则返回False。

可选优化:大小写不敏感匹配

如果需要忽略大小写(比如传入"gaga"也能匹配成功),可以在拆分后统一转成小写:

def check_artist(self, name):
    artist_words = set(word.lower() for word in self._artist.split())
    name_words = set(word.lower() for word in name.split())
    return bool(artist_words & name_words)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:15:35