检查列表值是否为字符串,而不是其他列表中的值



我有一个列表,看起来像这样:

list = ['for','and','with','be in']

并且我已经实现了一些代码来检查上面的单词是否包含在字符串中:

if any(word in stringVar for word in list):
\logic

以上工作如预期,然而,我不希望有一些短语被排除在上面,如下:

exc_list = ['for every','for each']

所以本质上,我想改变我的if语句,以便如果and,withbe in包含在stringVar中,或者for包含在stringVar中,而不是当它后面跟着everyeach时,它返回true。

我最初实现了这个:

if any(word in stringVar for word in list) and any(word not in stringVar for word in exc_list):
\logic

但是如果stringVar等于'will be in every day for each week',这将不会像预期的那样工作。

来确认,我想还真当and,withstringVarbe in都包含在,即使for each/every也出现。只有当for出现在stringVar

中时,排除才会生效。

只使用替换字符串,删除替换字符串中的所有排除项。

这样你就知道你的排除不在字符串中,可以直接检查你关心的项。

string = 'will be in every day for each week'
lst = ['for','and','with','be in']
exclusions = ['for every','for each']
replaced_string = string
for phrase in exclusions:
replaced_string = replaced_string.replace(phrase, '')
if any(word in replaced_string for word in lst):
# do stuff

你甚至可以把它放在一个函数,让它看起来更好。

def string_minus_exclusions(string, exclusions):
for phrase in exclusions:
string = string.replace(phrase, '')
return string
string = 'will be in every day for each week'
lst = ['for','and','with','be in']
exclusions = ['for every','for each']
replaced = string_minus_exclusions(string, exclusions)
if any(word in replaced for word in lst):
# do stuff

最新更新