>>> x = 5 >>> 1 < x < 10 True >>> 10 < x < 20 False >>> x < 10 < x*10 < 100 True >>> 10 > x <= 9 True >>> 5 == x > 4 True
Если вы думаете, что он выполняет 1 < x, что получается как True, а затем сравнивает True < 10, что тоже True, то нет, на самом деле это не то, что происходит (см. Последний пример.) Это действительно переводится в 1 < x and x < 10, и x < 10 and 10 < x * 10 and x*10 < 100, но с меньшим количеством типов ввода, и каждый термин вычисляется только один раз.
Ответ 2
Получите дерево синтаксического анализа регулярных выражений python для отладки вашего регулярного выражения.
Регулярные выражения - отличная функция python, но их отладка может быть сложной задачей, и слишком легко получить неправильное регулярное выражение.
К счастью, python может печатать дерево синтаксического анализа регулярных выражений, передавая недокументированный, экспериментальный, скрытый флаг re.DEBUG (фактически, 128) в re.compile.
Как только вы поймете синтаксис, вы сможете определить свои ошибки. Здесь мы видим, что я забыл экранировать [] в [/font].
Конечно, вы можете комбинировать его с любыми флагами, которые вы хотите, например, с регулярными выражениями с комментариями:
>>> re.compile(""" ^ # start of a line \[font # the font tag (?:=(?P<size> # optional [font=+size] [-+][0-9]{1,2} # size specification ))? \] # end of tag (.*?) # text between the tags \[/font\] # end of the tag """, re.DEBUG|re.VERBOSE|re.DOTALL)
Ответ 3
перечислять
Оберните итерацию с помощью enumerate, и это приведет к получению элемента вместе с его индексом.
Например:
>>> a = ['a', 'b', 'c', 'd', 'e'] >>> for index, item inenumerate(a): print index, item ... 0 a 1 b 2 c 3 d 4 e >>>