Python中如何获取any()方法判定为真的匹配项及一行实现
一行实现获取字符串中匹配的目标符号
你不需要硬改造any()函数来实现收集匹配项的需求——any()本身是为存在性判断设计的短路函数,找到第一个匹配值就会终止迭代,天生不适合做结果收集。直接用下面两种无冗余显式循环块的一行写法即可:
效率最高的写法(无顺序要求场景)
用集合交集运算,单字符查找效率为O(1),代码最简洁,完全不需要手写循环逻辑:
matched_signs = set(x) & {'/', '+', '-'}
针对你给出的示例x = 'A/B',运行后得到的结果是{'/'},会返回所有命中的符号。
保留检查顺序的写法(有顺序要求场景)
如果你需要按照['/', '+', '-']的原有检查顺序返回结果,用列表推导即可,写法比多行显式for循环块简洁得多,是Python社区公认的优雅实现:
matched_signs = [sign for sign in ['/', '+', '-'] if sign in x]
同样针对示例x = 'A/B',运行后返回['/'];如果字符串里同时存在多个目标符号,比如x = 'A/B+C',会按检查顺序返回['/', '+']。
注意:不要为了强行"完全不出现for关键字"去写嵌套高阶函数的晦涩写法(比如配合filter加lambda的实现),可读性会远差于上面两种方案,维护成本更高。
内容的提问来源于stack exchange,提问作者Ishan Shrestha
相关产品推荐
相关产品推荐

