Python中如何检测序列指定窗口内是否包含换行符
问题分析与解决方案
从你给出的示例来看,真实需求应该是:判断字符串的前10个字符内是否包含换行符\n。你的原代码逻辑是检查所有可能的10字符窗口,只要任意一个窗口包含换行符就返回True,这会错误地将换行符出现在字符串后半部分的案例判定为符合条件(比如第一个标记为false的字符串)。
修改后的代码
方案一:直接检查前10个字符
针对你的示例需求,函数可以简化为直接判断前10字符内是否存在换行符:
def has_newline_in_first_window(s, window=10): # 截取前window个字符,检查是否包含换行符 return "\n" in s[:window] my_list = ["KKAWTMYGNLSKKDQNRYNA\nDAT", # false "EEQLLNEPD\nKIVIIPACVIDELEENKKLKGLEEILKKVRRA", #true "NNCLQKYKEAEEYYEESIFILKTVN", # false "EEQLLNEPD\nKIVIIPACV\nIDELEENKKLKGLEEILKKVRRA", #true "NNCLQKYKEAEEYY\nEESIFILKTVN", # false ] for sequence in my_list: if has_newline_in_first_window(sequence): print(sequence)
方案二:修正原遍历逻辑(若需求为检查任意窗口)
如果你的真实需求是检查字符串中是否存在任意一个10字符窗口包含换行符(此方案与你的示例预期不符,仅作补充),原代码的循环范围存在错误,需要调整为覆盖所有可能的窗口:
def has_newline_within_window(s, window=10): # 修正循环范围,确保最后一个窗口也被遍历到 for i in range(len(s) - window + 1): if "\n" in s[i:i + window]: return True return False
验证结果
运行方案一的代码,会输出你预期的两个符合条件的字符串:
EEQLLNEPD KIVIIPACVIDELEENKKLKGLEEILKKVRRA EEQLLNEPD KIVIIPACV IDELEENKKLKGLEEILKKVRRA
内容的提问来源于stack exchange,提问作者littleworth
相关产品推荐
相关产品推荐

