为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查字符串在 Python 中的常量词之上是否至少有 1 个词的变体?

如何检查字符串在 Python 中的常量词之上是否至少有 1 个词的变体?

慕的地6264312 2021-07-08 14:02:42
因此,我的脚本会提取网站上列出的产品的标签,我不断地寻找一种产品,我知道它有一个特定的关键字和另一个拼写不时变化的关键字。关键字常量是“blazer”,另一个变量关键字是“10”或“十”。这是找到包含“西装外套”一词以及“10”或“十”的标题的正确方法吗?if 'blazer' in compareName and 'ten' or '10' in compareName:  func()else:  pass因此,如果字符串变量 compareName 同时具有 'blazer' 和 'ten' 或 'blazer' 和 '10',我希望该函数运行
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

'ten' or '10' in compareName部分不会给你你想要的结果。每次都会返回“十”!相反,您需要检查“十”是否在 compareName 中,并检查“10”是否在比较名称中,并将 或 放在两者之间,如下所示:

if 'blazer' in compareName and ('ten' in compareName or '10' in compareName):


查看完整回答
反对 回复 2021-07-13
?
手掌心

TA贡献1942条经验 获得超3个赞

您似乎对编程的工作方式有根本的误解。我强烈建议你在继续之前阅读一些比较。


这里的声明:


if 'blazer' in compareName and 'ten' or '10' in compareName:

基本上评估为:


if (('blazer in compareName) == True) and ('ten' == True) or (('10' in compareName) == True):

假设compareName是 'blazerten',它将评估为:


if True and True or False:


# Note: Python evaluates OR before AND operators


# Result: True

看起来不错?不!如果compareName是 'blazer',它将评估相同的东西。因为第二个条件'ten'总是评估为,True因为它不是一个空字符串,所以一旦你满足第一个条件,第二个和第三个条件就没有实际意义了。


正确的方法是提到的其他答案,您需要分别进行比较:


if 'blazer' in compareName and 

   'ten' in compareName or 

   '10' in compareName:

注意:如果您尊重操作优先级,则不需要括号。


如果你觉得有点冒险,又不想重复太多,你可以尝试用列表理解来表达:


if 'blazer' in compareName and

   any([part in compareName for part in ['ten', '10']]):

第二个条件现在由any()函数处理。当然,需要注意的是,您放弃了一点可读性。优势虽然是如果你需要比较多只'ten',并'10'在OR子句中,你可以简单地添加到第二个条件的名单。


查看完整回答
反对 回复 2021-07-13
?
偶然的你

TA贡献1841条经验 获得超3个赞

我相信有更好的方法可以做到这一点,但要简单地维护您的语法并给出正确的答案,您的if语句应该是


if 'blazer' in compareName and ('ten' in compareName or '10' in compareName):

    func()

else:

    pass


查看完整回答
反对 回复 2021-07-13
  • 3 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信