any((c in badChars) for c in yourString)
或者
any((c in yourString) for c in badChars) # extensionally equivalent, slower
或者
set(yourString) & set(badChars) # extensionally equivalent, slower
“只要遇到一个就足以结束搜索。” - 如果您使用第一种方法,这将是正确的。
您说您关心性能:除非您处理大量数据,否则性能不应该成为问题。如果遇到问题,可以尝试:
正则表达式
编辑以前我在这里写了一个关于使用正则表达式的部分,通过re
模块,以编程方式生成一个由单个字符类[...]
和 using组成的正则表达式,.finditer
但需要注意的是,在一切可能无法正常工作之前放置一个简单的反斜杠。确实,经过测试,是这样的,我绝对不会推荐这种方法。使用它需要对正则表达式字符类的整个(稍微复杂的)子语法进行逆向工程(例如,您可能有字符 like\
后跟w
, like ]
or [
, or like -
,而仅仅转义一些 like\w
可能会给它一个新的含义)。
套
根据操作是 O(1) 还是 O(N) ,如果您有很多 badChar str.__contains__
,首先将您的文本/行转换为一组以确保操作是 O(1) 可能是合理的:in
badCharSet = set(badChars)
any((c in badChars) for c in yourString)
any((c in set(yourString)) for c in badChars)
(根据python编译器的智能程度,可以使它成为一个单行代码)
您真的需要逐行执行此操作吗?
对整个文件 O(#badchars) 执行一次此操作可能比对文件 O(#lines*#badchars) 中的每一行执行一次更快,尽管渐近常数可能无关紧要。