Perl中".."(范围/触发器)运算符的Python等效实现是什么?
Perl中".."(范围/触发器)运算符的Python等效实现
Perl的..运算符(范围/触发器运算符)的核心逻辑是:遍历元素时,当第一个正则匹配条件触发后开始包含元素,直到第二个正则匹配条件触发(包含该匹配元素)后停止。你的示例里,它会输出从匹配/ar.a/的元素开始,到匹配/az\w/的元素结束的所有项。
Perl示例代码
for ( qw( foo bar barbar baz bazbaz bletch ) ) { print "$_\n" if /ar.a/ .. /az\w/; }
输出:
barbar baz bazbaz
更简洁的Python实现
你提到的索引查找方法需要两次遍历列表,确实繁琐。我们可以模仿Perl的逐元素触发逻辑,用一个状态变量跟踪是否处于目标范围内,一次遍历就能完成:
import re lst = 'foo bar barbar baz bazbaz bletch'.split() in_range = False result = [] for item in lst: # 触发进入范围的条件 if not in_range and re.search(r'ar.a', item): in_range = True # 处于范围内则收集元素 if in_range: result.append(item) # 触发退出范围的条件(仅需单个范围,找到后直接终止遍历) if in_range and re.search(r'az\w', item): break print(result) # 输出: ['barbar', 'baz', 'bazbaz']
这个实现的优势:
- 仅需一次遍历,效率更高
- 逻辑和Perl运算符完全对齐,逐元素判断触发状态
- 避免了原方法中
[0]索引可能引发的空列表报错问题(可按需添加异常处理)
内容的提问来源于stack exchange,提问作者Timur Shtatland
相关产品推荐
相关产品推荐

