2016-04-08 2 views
-2

Итак, у меня есть код Python в тот момент, который делает что-то вроде этого:Проверка, является ли число не в диапазоне в Python

if plug in range(1, 5): 
    print "The number spider has disappeared down the plughole" 

Но что я на самом деле хочу сделать, это проверить, если число не в ассортименте. Я googled и посмотрел документы Python, но я ничего не могу найти. Есть идеи?

Дополнительные данные: При выполнении этого кода:

if not plug in range(1, 5): 
    print "The number spider has disappeared down the plughole" 

Я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "python", line 33, in <module> 
IndexError: list assignment index out of range 

Я также попытался:

if plug not in range(1,5): 
    print "The number spider has disappeared down the plughole" 

Который вернулся и ту же ошибку.

+7

'не в диапазоне (1, 5)'? – vaultah

+0

Да, в основном –

+4

Вы пробовали? – vaultah

ответ

7

Если диапазон имеет step одного, то производительность мудрым гораздо быстрее использовать:

if 1 <= plug < 5: 

чем было бы использовать not метод, предложенный другими:

if plug not in range(1, 5) 

Доказательство:

>>> import timeit 
>>> timeit.timeit('1 <= plug < 5', setup='plug=3') # plug in range 
0.053391717400628654 
>>> timeit.timeit('1 <= plug < 5', setup='plug=12') # plug not in range 
0.05137874743129345 
>>> timeit.timeit('plug not in r', setup='plug=3; r=range(1, 5)') # plug in range 
0.11037584743321105 
>>> timeit.timeit('plug not in r', setup='plug=12; r=range(1, 5)') # plug not in range 
0.05579263413291358 

И это даже не принимая во внимание время, затраченное на создание range.

+0

Это всегда быстрее для производительности, или есть другие зависимые факторы, которые могли бы правдоподобно повлиять на вещи? –

+1

@PeterDavidCarter Я ничего не могу обещать, но, насколько я могу судить, всегда быстрее делать это. Возможно, если вы играете с несколькими переменными, чтобы убедиться, что все они вне диапазона ... В общем, 'range()' следует использовать в те моменты, когда вам нужно использовать все числа в пределах диапазона. В этом случае вам понадобятся только начальные и конечные точки. –

+0

Мне интересно, но можно ли на самом деле посмотреть на код компилятора для Javascript, чтобы узнать, почему он быстрее для меня? Я уверен, что ты прав, мне просто интересно узнать больше. Все библиотеки Javascript я бы, скорее всего, нашел их на Github, но сам JS ... Мне было бы интересно начать видеть вещи на более низком уровне, я думаю ... –

0
if not plug in range(1,5): 
    #bla 
+0

Я делал «plug in the range()». Но этот способ, похоже, тоже не работает. Hhhmmmm ... –

+0

@PeterDavidCarter 'is' проверяет личность. В то время как Python * в основном * читается как английский, на самом деле это не английский;) –

+0

Я пробовал его с и без него ... –

1

Использование:

if plug not in range(1,5): 
    print "The number spider has disappeared down the plughole" 

Он будет печатать данную строку, когда штепсель переменная находится вне диапазона от 1 до 5

+0

Странно, в первый раз, когда я запускал этот код, он не работал. Потом потом это сработало. Как странно. –

0

Это кажется работа, а также:

if not 2 < 3 < 4: 
    print('3 is not between 2 and 4') # which it is, and you will not see this 

if not 2 < 10 < 4: 
    print('10 is not between 2 and 4') 

Точный ответ на исходный вопрос будет if not 1 <= plug < 5: я думаю