Python 无法理解.join(映射(例如,转义))
我很难理解what.join(map(例如,re.escape)) 我试着阅读文档和示例代码,但没有结果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函数将
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
(如名称所示)连接这些字符串,在它们之间插入一个|
因此,结果与您编写的一样(输出将是…)
补充说明:
*\*\\\\\\\\\*.-\\+
表示您不知道哪些字符是特殊正则表达式字符
也不知道re.escape
是如何工作的。
在网上搜索有关regex的说明并阅读输出与您的理解有什么不同?似乎你已经准确地描述了这里发生的事情。如果按照我的理解,输出不应该是*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。你是说
reversed(operators)
?“我看到你在这里创建了一个带有可选项的正则表达式模式。所以,至少在这种情况下,可选项的顺序并不重要,你可以省略reverse=True。”恭喜你,你明白了我为什么说这很奇怪了。但是,如果需要保证\*\*
优于\*
,则不必省略reverse=True
。因此,您可能会使用反向而不进行排序,嗯?Ry-,您是对的。另一种选择是自己设置正确的顺序(首先是***
,然后是*
,然后是所有剩余的顺序)并删除所有排序。