Альтернативой set
предложил в других вопросах, которые могут быть быстрее в некоторых случаях, в которых он терпит неудачу:
all(y in (1, 2) for y in x)
Иногда это может быть быстрее, потому что all
«не работает быстро» - он освобождается (не прерывает цикл), как только обнаруживается один элемент, который является ложным.
Что касается скорости,
$ python -mtimeit -s'x=[1,2,1,1,1,2,1];check=(1,2)' 'all(y in check for y in x)'
1000000 loops, best of 3: 1.03 usec per loop
$ python -mtimeit -s'x=[1,2,1,1,1,2,1];check=set((1,2))' 'all(y in check for y in x)'
1000000 loops, best of 3: 1.01 usec per loop
(временная разница "в шуме"). Предлагаемое использование сетов других ответов, если убийца ошибка присутствует в оригинальной версии и фиксируются, на самом деле быстрее:
$ python -mtimeit -s'x=[1,2,1,1,1,2,1];check=set((1,2))' 'set(x)<=check'
1000000 loops, best of 3: 0.425 usec per loop
Убийца ошибка в том, что сказала оригинальные версии, для обоего ответов (в настоящее время корректируются в редактировании), использовали ==
вместо <=
- поэтому они проверили, что элементы x
точно такие же, как и у check
, а не по мере необходимости, чтобы удовлетворить ваши спецификации, являющиеся подмножеством (один из ваших примеров требуется True
для x
и [1,2,3]
, и обе эти оригинальные версии потерпели бы неудачу).
Почему 'True' для' [1, 2, 3] '? –
@AshwiniChaudhary - потому что все элементы в '[1,2,1,1,1,2,1]' можно найти в '[1, 2, 3]'. – iCodez