如何在嵌套列表中查找指定值的所有索引?
嵌套列表中查找指定值的所有索引实现方法
首先纠正一个小误区:普通列表里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
相关产品推荐
相关产品推荐

