Есть два подхода.Одним из них является проверка членства в итераторе:
from itertools import permutations
from collections import Counter
def verify_string(name, compare):
if tuple(compare.lower().split()) in permutations(name.lower().split()):
print(f"Found: {compare} in {name}")
else:
print("No match found")
Мы также можем полностью избежать функции с помощью троичного оператора:
val if val in itr else other_val
Если рассматриваемый итератор является permutations
, тогда мы можем уйти без учета каждой перестановки и вместо этого считать слова.
def verify_string_fast(name, compare):
if not Counter(compare.lower.split()) - Counter(name.lower.split()):
print(f"Found: {compare} in {name}")
else:
print("No match found")
В целом, если у нас есть условие теста, отличное от членства, мы можем выполнить:
def verify_general(val, itr):
if any(compare(val, x) for x in itr):
print("Success")
else:
print("Failure")
Примечание о членстве в итераторе.Согласно официальной документации ,
Для пользовательских классов, которые не определяют , содержат (), но определяют iter (), x в y - это True, если какое-то значение z с x == z получается при итерации по y.Если во время итерации возникает исключение, оно как если бы вызывало это исключение.
Поскольку permutations
имеет метод __iter__
, тестирование на членство возможно.
Например,
assert (3, 2, 1) in permutations([1, 2, 3])