Python 3.11.1是否提供类似C++ string::find_first_not_of或Fortran NCPOS的内置函数?
Python 3.11.1是否提供类似C++ string::find_first_not_of或Fortran NCPOS的内置函数?
嘿,好问题!Python 3.11.1本身并没有直接对应C++ string::find_first_not_of或Fortran NCPOS的内置字符串方法,但实现这个功能其实很简单,有几种靠谱的方式:
方法一:手动遍历实现(直观易懂)
这种方式逻辑清晰,适合新手理解,也方便根据需求调整:
def ncpos(s, chars, start=0): # 从指定的start位置开始遍历字符串 for i in range(start, len(s)): # 检查当前字符是否不在目标字符集合里 if s[i] not in chars: return i # 如果从start到字符串末尾全是目标字符,返回-1表示未找到 return -1
用你给出的例子测试:
pos = ncpos(" 012345 hello", " eh", 10) print(pos) # 输出14,和预期一致
方法二:生成器表达式+next函数(简洁一行式)
如果喜欢更紧凑的代码,可以用生成器配合next函数实现,同样能达到效果:
def ncpos(s, chars, start=0): # 从start位置开始枚举字符和对应索引,找第一个不在chars里的索引 return next((i for i, c in enumerate(s[start:], start) if c not in chars), -1)
这个实现和第一种逻辑本质一样,只是用生成器表达式简化了循环写法,next的第二个参数-1是找不到符合条件字符时的默认返回值。
日常使用中,两种方法都能满足需求,如果是处理超大量字符串的场景,手动遍历的性能会略胜一筹,但对于大多数场景来说,两者差异可以忽略。
备注:内容来源于stack exchange,提问作者Jason C
相关产品推荐
相关产品推荐

