Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 26, 2008 14:05:36

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Проверка строкового параметра

PyCraft
ИМХО, регулярка и только регулярка т.к. намного быстрее и намного нагляднее и понятнее
Регулярка не быстрее, одна только компилляция займет больше времени, чем проверка посимвольно. К тому же питоновский движок регулярки - на НКА, а это значит, что оператор “|” еще сильнее увеличит суммарное время выполнения (хотя не думаю, что производительность в данной задаче играет какую-то роль :) ). И последнее, вариант, предолженный PyCraft (да и вообще, любой вариант, использующий запоминающие либо именные скобки), будет работать для строк, длиной не более ста символов - из-за ограничения на количество запоминающих скобок - не более ста в одном регулярном выражении, это легко проверить, если заглянуть в исходники. Если регулярка будет генерироваться динамически, то такая ситуация вполне жизненная.



Офлайн

#2 Июнь 26, 2008 14:14:09

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Проверка строкового параметра

ice
И ведь забыл я совсем про енумирейт
Кстати, вместо нее можно воспользоваться функцией zip:
def check(validityList, myString):
zippedList = zip(myString, validityList)
if len(zippedList) < 2:
warnings.warn(“string's length less then 2”)
for char, allowable in zippedList:
if char not in allowable:
warnings.warn('character “%s” is not allowable in “%s”' %(char, allowable))



Отредактировано (Июнь 26, 2008 14:20:57)

Офлайн

#3 Июнь 26, 2008 14:30:00

PyCraft
От:
Зарегистрирован: 2008-05-23
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка строкового параметра

ZAN
Регулярка не быстрее, одна только компилляция займет больше времени, чем проверка посимвольно.
Кому надо, тот проверит фактическую производительность на больших циклах.

В задаче ничего не сказано, про динамически изменяемые списки, поэтому принимаем их постоянными, хотя ничто не мешает их менять и перекомпилировать. Компиляция выполняется один раз вначале, а применение многократно в цикле. Последовательность $| можно поменять на |$, для исследования производительности. Максимальное количество скобок явно задано в задаче - от 2 до 6

ZAN
Сложность, фактически, скорее не в реализации, а в задании конфигурации для валидной строки.
Неужели моя регулярка сложна для восприятия?



Отредактировано (Июнь 26, 2008 14:35:12)

Офлайн

#4 Июнь 26, 2008 14:57:55

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Проверка строкового параметра

PyCraft
Неужели моя регулярка сложна для восприятия?
:)

PyCraft
только регулярка т.к. намного быстрее
В данной задаче регулярка может работать в лучшем случае почти так же, как и перебором (при небольшом количестве альтернатив “|” и массивных сетах "")
Лично я, решая подобного рода задачу, скорее всего также выбрал бы регулярку, но, скорее, из-за привычки, а не потому, что это:
PyCraft
намного быстрее и намного нагляднее и понятнее



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version