如何在 if 语句中使用 set.intersection?

How to use set.intersection in an if-statement?

我想检查多个字符串是否在一个名为“str_a”的较大字符串中。以下是我目前拥有的并且有效。

animals = {"giraffe", "tiger"}
str_a = "A giraffe is taller than a tiger."

if "giraffe" in str_a or "tiger" in f:
    print ("T")
else:
    print ("F")

但是,我想以更简洁的方式表示 if 语句,我认为 set.intersection 可以帮助我实现这一点。我用 set.intersection 尝试了以下操作,它打印出“F”而不是“T”——我不确定为什么。对此的任何指导将不胜感激!

animals = {"giraffe", "tiger"}
str_a = "A giraffe is taller than a tiger."
matches = animals.intersection(str_a)

if matches:
    print ("T")
else:
    print ("F")

您应该改用 any:

s = set(str_a.split())
if any(animal in s for animal in animals):
    print('T')
else:
    print('F'

要将字符串转换为一组单词,请使用 .split():

>>> set(str_a.split())
{'giraffe', 'A', 'taller', 'tiger.', 'is', 'than', 'a'}

您现在可以设置交集:

>>> set(str_a.split())&animals
{'giraffe'}

请注意 'tiger.''tiger' 不同。要去除标点符号,您可以使用集合理解:

>>> {w.rstrip(',.:') for w in str_a.split()}
{'giraffe', 'tiger', 'A', 'taller', 'is', 'than', 'a'}

那么两者都会被找到:

>>> {w.rstrip(',.:') for w in str_a.split()}&animals
{'giraffe', 'tiger'}

您可以使用动物集的 isdisjoint 方法。 isdisjoint 会告诉您 animals 中的所有元素是否都没有出现在 str_a 中的单词中(本质上是“F”结果),而无需创建第二组。

animals = {"giraffe", "tiger"}
str_a = "A giraffe is taller than a tiger."

if not animals.isdisjoint(str_a.split()):
    print("T")
else:
    print("F")