Python 无法理解.join(映射(例如,转义))

Python 无法理解.join(映射(例如,转义)),python,sorting,escaping,Python,Sorting,Escaping,我很难理解what.join(map(例如,re.escape)) 我试着阅读文档和示例代码,但没有结果 operators = ['+', '-', '*', '/', '**'] print ('|'.join(map(re.escape, sorted(operators, reverse=True))) # output will be \/|\-|\+|\*\*|\* 所以我不确定我的理解是否正确,但我认为这行代码所做的是 1) 特殊字符数组将按相反顺序排序 2) 使用map函数将

我很难理解what.join(map(例如,re.escape))

我试着阅读文档和示例代码,但没有结果

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

# output will be \/|\-|\+|\*\*|\*
所以我不确定我的理解是否正确,但我认为这行代码所做的是

1) 特殊字符数组将按相反顺序排序

2) 使用map函数将数组中的元素映射到escape函数,这样我就可以按原样打印出特殊字符

3) 然后我使用“|”来加入


但结果与我的理解非常不同。如果有人能向我解释为什么输出是这样,那就太好了?事先非常感谢。

正如Ry评论的那样,
reverse=True
没有什么奇怪的地方。 它引入的唯一变化是排序是降序 顺序比较两种变体:

  • 排序(运算符)
    导致
    ['*'、'**'、'+'、'-'、'/']
    (正常(升序)排序)
  • 排序(运算符,reverse=True)
    结果为
    ['/'、'-'、'+'、'**'、'*']
    (降序排序)
然后
map(re.escape,…)
re.escape
应用于列表的每个元素

碰巧每个元素中的每个字符都是一个特殊的正则表达式字符,所以每个字符都是 在前面加上反斜杠,因此结果是:
['\/'、'\-'、'\+'、'\*\*'、'\*']

然后,
join
(如名称所示)连接这些字符串,在它们之间插入一个
|

因此,结果与您编写的一样(输出将是…)

补充说明:

  • 我看到您在这里创建了一个带有 选择。所以,至少在这种情况下,备选方案的顺序 不重要,可以省略reverse=True

  • 您关于预期结果应为
    *\*\\\\\\\\\*.-\\+
    表示您不知道哪些字符是特殊正则表达式字符 也不知道
    re.escape
    是如何工作的。 在网上搜索有关regex的说明并阅读


  • 输出与您的理解有什么不同?似乎你已经准确地描述了这里发生的事情。如果按照我的理解,输出不应该是*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。你是说
    reversed(operators)
    ?“我看到你在这里创建了一个带有可选项的正则表达式模式。所以,至少在这种情况下,可选项的顺序并不重要,你可以省略reverse=True。”恭喜你,你明白了我为什么说这很奇怪了。但是,如果需要保证
    \*\*
    优于
    \*
    ,则不必省略
    reverse=True
    。因此,您可能会使用
    反向
    而不进行排序,嗯?Ry-,您是对的。另一种选择是自己设置正确的顺序(首先是
    ***
    ,然后是
    *
    ,然后是所有剩余的顺序)并删除所有排序。