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

如何在嵌套列表中查找指定值的所有索引?

嵌套列表中查找指定值的所有索引实现方法

首先纠正一个小误区:普通列表里list.index(1)只会返回第一个匹配值的索引(你示例里的结果是3),要获取所有匹配的索引,得用列表推导式:

my_list = [2,5,9,1,3,1]
all_indices = [i for i, val in enumerate(my_list) if val == 1]
print(all_indices)  # 输出 [3,5]

(注意别用内置类型list当变量名,避免命名冲突)

对于嵌套列表,我们可以用递归遍历的方式,记录每一层的索引路径,找到目标值时就保存当前路径。实现代码如下:

def find_nested_indices(nested_list, target):
    indices = []
    def traverse(current, path):
        for idx, item in enumerate(current):
            if item == target:
                indices.append(path + [idx])
            elif isinstance(item, list):
                traverse(item, path + [idx])
    traverse(nested_list, [])
    return indices

# 测试你的示例
sample_list = [1, [2,3,17] , 3 , [0,1,2,7,3] , 2 ]
target_val = 2
print(find_nested_indices(sample_list, target_val))  # 输出 [[1, 0], [3, 2], [4]]

代码说明

  • 外层函数find_nested_indices初始化存储结果的列表indices
  • 内部函数traverse负责递归遍历:
    • 用enumerate同时获取当前元素的索引和值
    • 如果当前元素等于目标值,把当前的索引路径(path加上当前索引)存入结果列表
    • 如果当前元素是子列表,递归调用traverse,并把当前索引加入路径,继续遍历子列表
  • 初始调用时,路径为空列表,从最外层列表开始遍历

扩展说明

  • 这个方法支持任意层数的嵌套,不管嵌套多深都能正确捕获所有匹配的索引路径
  • 如果需要支持元组等其他嵌套可迭代类型,只需把isinstance(item, list)改成isinstance(item, (list, tuple))即可

内容的提问来源于stack exchange,提问作者johnny bailey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:36:19