如何在 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")
我想检查多个字符串是否在一个名为“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")