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

Python查找嵌套列表中包含指定子串的内层列表对应外层索引

Python嵌套列表子串匹配查外层索引实现方案

问题背景

现有如下结构的Python嵌套列表:

lst = [['Apple Pie', 'Carrot Cake'], ['Steak', 'Chicken']]

需求为查找包含指定子串的内层列表对应的外层索引,本例中查找子串'Carrot',预期输出结果为0。
此前实现的代码仅支持匹配内层列表的完整元素,无法完成子串匹配,原代码如下:

def find_index(l, c):
    for i, v in enumerate(l):
        if c in v:
            return i
res = find_index(lst, 'Carrot')

可用实现方案

方案1:双重循环枚举索引(性能最优)

直接遍历外层列表的索引和元素,再遍历内层列表的每个字符串做子串匹配,匹配到就直接返回外层索引:

def find_index(l,c):
    for i,v in enumerate(l):
        for j in v:
            if c in j:
                return i
    # 无匹配结果时返回-1
    return -1

方案2:any()简化写法(可读性最优)

用内置函数any()简化内层循环的写法,逻辑和方案1完全一致,代码更简洁易读:

def find_index(l, c):
    for i, v in enumerate(l):
        if any(c in x for x in v):
            return i
    return -1

方案3:调用list.index()获取索引

遍历到匹配项后调用列表的index()方法获取外层索引,该方法会额外遍历一次外层列表,性能略低:

def function(list_contains,word_to_know):
    for x in list_contains:
        for y in x:
            if word_to_know in y:
                return list_contains.index(x)
    return -1

性能测试结果

使用timeit模块对以上方案在示例数据集上做性能测试,各方案耗时如下:

  • 双重循环枚举索引方案:0.005458s
  • any()简化方案:0.0054626s
  • 调用list.index()方案:0.0054856s
  • 显式命名变量的双重循环方案:0.0054621s

几个方案的性能差异极小,常规业务场景下优先选择可读性更高的any()方案即可,性能敏感场景可选择无额外开销的双重循环枚举方案。

内容的提问来源于stack exchange,提问作者Tea-F-Tea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:27:05