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

如何获取嵌套列表(nested list)中目标元素的全部索引?

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

你当前的函数只能返回第一个匹配项的索引,无法获取全部目标索引,以下是正确的实现方案:

问题示例

给定嵌套列表:

a_list = [['pen', 'pencil', 'eraser'], 
          ['ruler', 'paper', 'pen'], 
          ['pen', 'pen', 'bag'], 
          ['pencil', 'pen', 'paper']]

查找'pen'的所有索引,预期正确输出应为:

OUTPUT: (0,0),(1,2),(2,0),(2,1),(3,1)

(注:你提供的预期输出中部分索引不符合列表实际长度,已修正)

现有代码问题

你的现有函数存在两个关键问题:

  • 遇到第一个匹配项就执行return,直接终止函数,无法继续遍历后续元素
  • i.index(stationary)仅能返回子列表中第一个匹配元素的索引,无法捕获子列表内的所有匹配项

正确实现方案

方案一:双重循环遍历收集

def finding(listoflist, stationary):
    indices = []
    # 遍历外层列表,记录外层索引
    for outer_idx, sublist in enumerate(listoflist):
        # 遍历子列表,记录内层索引
        for inner_idx, item in enumerate(sublist):
            if item == stationary:
                indices.append((outer_idx, inner_idx))
    return indices

# 调用函数并格式化输出
a_list = [['pen', 'pencil', 'eraser'], 
          ['ruler', 'paper', 'pen'], 
          ['pen', 'pen', 'bag'], 
          ['pencil', 'pen', 'paper']]

result = finding(a_list, 'pen')
print(f"OUTPUT: {','.join(map(str, result))}")

方案二:列表推导式简化写法

如果追求代码简洁,可以用列表推导式实现相同逻辑:

def finding(listoflist, stationary):
    return [(outer_idx, inner_idx) 
            for outer_idx, sublist in enumerate(listoflist) 
            for inner_idx, item in enumerate(sublist) 
            if item == stationary]

# 调用和输出同上

两种方案都会返回所有匹配项的索引元组,最终输出符合预期。

内容的提问来源于stack exchange,提问作者Kathie K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:45:38