главная проблема здесь в том, что вам, кажется, требуется, чтобы nums
было list
, где - поскольку целые числа являются хэшируемыми -, nums
может быть / start как set
.В этом случае:
def hasab(nums):
return a in nums or b in nums
будет самым быстрым способом проверить это, и в этом случае in
не "повторяется" в set
.Значения хешируются и проверяются со средним временем O(1)
.Это плюс короткое замыкание делает это очень быстрым.
Конечно, nums
не следует преобразовывать из list
в set
каждый раз, иначе это будет бесполезно.
Длябольше элементов (или неизвестное количество элементов), вы можете рассмотреть возможность использования any
:
return any(x in nums for x in [a,b,c,d,...])
Если ваши данные также поступают в set
, то лучший способ - проверить, являются ли оба набора't disjoint:
return not nums.isdisjoint(input_set)
isdisjoint
действительно эффективен, только если внутренний аргумент равен set
(для более подробной информации: задайте разницу производительности issubset в зависимости от типа аргумента )
Так что просто убедитесь, что вы создаете / поддерживаете nums
как set
, а не list
, и в вашем распоряжении будут быстрые и удобочитаемые конструкции.