Python如何查找嵌套子列表中元素位置 解决index方法报错问题
嵌套子列表元素定位解决方案
报错原因
直接调用lst.index('a')报错的核心原因是:list.index()方法只会查找当前列表的直接子元素,你定义的lst的直接子元素是两个子列表['a', 'b', 'c', 'd', 'e']和['f', 'g', 'h'],并不包含字符串'a',因此会抛出ValueError: 'a' is not in list。
实现方法
方法1:查找第一个匹配元素的坐标
仅返回第一个匹配到的元素的(外层索引, 内层索引)元组,找不到则抛出异常:
def get_first_match(nested_list, target): for outer_idx, sublist in enumerate(nested_list): try: inner_idx = sublist.index(target) return (outer_idx, inner_idx) except ValueError: continue raise ValueError(f"{target} 不存在于嵌套列表中") # 测试调用 lst = [['a', 'b', 'c', 'd', 'e'], ['f', 'g', 'h']] print(get_first_match(lst, 'a')) # 输出:(0, 0) print(get_first_match(lst, 'g')) # 输出:(1, 1)
方法2:查找所有匹配元素的坐标
如果嵌套列表中存在多个重复的目标元素,可使用该方法返回所有匹配坐标的列表:
def get_all_matches(nested_list, target): match_positions = [] for outer_idx, sublist in enumerate(nested_list): for inner_idx, item in enumerate(sublist): if item == target: match_positions.append((outer_idx, inner_idx)) if not match_positions: raise ValueError(f"{target} 不存在于嵌套列表中") return match_positions # 测试调用 lst = [['a', 'b', 'a'], ['f', 'a', 'h']] print(get_all_matches(lst, 'a')) # 输出:[(0, 0), (0, 2), (1, 1)]
内容的提问来源于stack exchange,提问作者john johns
相关产品推荐
相关产品推荐

