#python
Вопрос:
У меня есть список, который выглядит так:
list = ['for','and','with','be in']
И я реализовал некоторый код, который проверяет, содержатся ли вышеуказанные слова в строке:
if any(word in stringVar for word in list): \logic
Вышесказанное работает, как и ожидалось, однако я не хочу, чтобы некоторые фразы были исключены из вышесказанного следующим образом:
exc_list = ['for every','for each']
Поэтому, по сути , я хочу изменить свое утверждение if так, чтобы оно возвращало значение true, если and
with
и be in
содержится в stringVar
ИЛИ for
, содержится в stringVar
, но не тогда, когда за ним следует every
или each
.
Я изначально реализовал это:
if any(word in stringVar for word in list) and any(word not in stringVar for word in exc_list): \logic
Но это не будет работать так, как ожидалось, если значение stringVar
равно «будет в каждый день на каждую неделю».
Чтобы подтвердить, я хочу возвращать значение true во все времена , когда and
with
и be in
содержатся в stringVar
, даже если for each/every
это тоже должно появиться. Исключения должны вступать в силу только тогда, когда for
появляются в stringVar
Ответ №1:
Просто используйте замененную строку, удалив все исключения при замене.
Таким образом, вы будете знать, что ваши исключения не указаны в строке, и сможете просто напрямую проверить наличие интересующих вас элементов.
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
Комментарии:
1. Ах да, я вижу, как это будет работать, хотя я думаю, что это сломается, когда вы установите replaced_string=», поэтому я изменил его на
replaced_string = string.replace(phrase, '')
2. Вы правы. Я не тестировал и просто по умолчанию использовал пустую строку.
replaced_string = ''
должно бытьreplaced_string = string