Возникли проблемы с пониманием .join (карта (re.escape, пример)) - PullRequest
0 голосов
/ 21 июня 2019

У меня проблемы с пониманием того, что .join (карта (re.escape, пример))

Я пытался прочитать документацию и примеры кодов, но безрезультатно

operators = ['+', '-', '*', '/', '**']
print ('|'.join(map(re.escape, sorted(operators, reverse=True)))

# output will be \/|\-|\+|\*\*|\*

, поэтомуЯ не уверен, что мое понимание верно, но я думаю, что эта строка кода делает

1) массив специальных символов будет отсортирован в обратном порядке

2) используйте картуфункция для сопоставления элементов в массиве с escape-функцией, чтобы я мог распечатать специальные символы, как они

3) Затем я присоединяюсь, используя '|'

, но вывод оченьотличается от того, что говорит мое понимание.Было бы замечательно, если бы кто-то мог объяснить мне, почему вывод такой, какой он есть?Большое спасибо заранее.

1 Ответ

0 голосов
/ 21 июня 2019

Нет ничего странного в reverse=True, как прокомментировал Ry- . Единственное изменение, внесенное им, заключается в том, что сортировка происходит по по убыванию порядок. Сравните оба варианта:

  • sorted(operators) приводит к ['*', '**', '+', '-', '/'] (нормальная (восходящая) сортировка),
  • sorted(operators, reverse=True) приводит к ['/', '-', '+', '**', '*'] (сортировка по убыванию).

Тогда map(re.escape, ...) применяет re.escape к каждому элементу списка.

Оказалось, что каждый символ в каждом элементе - это специальный символ регулярного выражения, поэтому каждый из них с добавлением обратной косой черты, и, следовательно, результат: ['\/', '\-', '\+', '\*\*', '\*'].

Затем join (как видно из названия) соединяет эти строки, вставляя между ними |.

Итак, результат такой же, как вы написали ( вывод будет ... ).

Дополнительные замечания:

  1. Я вижу, что вы создаете здесь шаблон регулярного выражения с альтернативы. Так что, по крайней мере, в этом случае порядок альтернатив не важно, и вы можете опустить reverse = True .

  2. Ваш комментарий о том, что ожидаемый результат должен быть *\*\ | / | * | - | + означает, что вы не знаете, какие символы являются специальными символами регулярных выражений ни как re.escape работает. Поищите в Интернете инструкции о регулярных выражениях и прочитайте их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...