You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在包含布尔值的列表中检查子字符串存在且不修改原数据

问题背景

需要检查嵌套列表中是否存在指定子字符串,但列表中混有布尔值无法直接统一做字符串操作,希望找到不需要修改原数据的高效实现方案。
报错信息

原实现代码

def replace_falseTrue_as_strings(lst):
    for i in lst:
        if isinstance(i,list):
            for j in i:
                if all(not isinstance(j,list)):
                    for k in j:
                        k_new.append(str(k))
                    return k
                if any(isinstance(j,list)):
                    return replace_falseTrue_as_strings(j)
        else:
            i_new.append(str(i))
            return j_new
解决方案

你不需要提前把所有布尔值转成字符串修改原数据,只需在遍历做子串匹配前加一层类型判断,跳过布尔值仅对字符串做匹配即可,该方案不会修改原列表任何内容,也能正确处理任意深度的嵌套列表结构。

实现代码

def check_substring_in_nested_list(lst: list, target_substr: str) -> bool:
    for item in lst:
        if isinstance(item, list):
            # 递归处理嵌套列表
            if check_substring_in_nested_list(item, target_substr):
                return True
        elif isinstance(item, str):
            # 仅对字符串类型做子串匹配
            if target_substr in item:
                return True
        # 布尔值、数字等非字符串类型直接跳过,无需处理
    return False

调用示例

# 测试用例(包含布尔值、嵌套列表、字符串、其他类型数据)
test_list = [True, "hello world", False, [1, "test demo", [True, "target content"]], None]
print(check_substring_in_nested_list(test_list, "target")) # 输出 True
print(check_substring_in_nested_list(test_list, "not exist")) # 输出 False

原代码问题说明

你当前的实现存在几个明显缺陷:

  • 使用了未在函数内定义的全局变量k_new、i_new、j_new,运行会直接报错
  • 递归返回逻辑错误,仅遍历到第一个非列表元素/子列表就会提前终止,无法遍历全量数据
  • 会额外生成转换后的新列表,占用不必要的内存空间

内容的提问来源于stack exchange,提问作者Shivam Anand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:15:02