如何获取嵌套列表(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
相关产品推荐
相关产品推荐

