Python二维列表元素查找异常及索引通用获取方法咨询
问题产生原因
list1是二维列表,它的顶层元素是两个子列表[1,3,5,7]和[18,9,23,30]。你在循环中使用if element in list1做判断时,in运算符只会检查待判断元素是否和list1的顶层元素相等,并不会递归遍历子列表内部的元素。也就是说你的判断逻辑等价于“1是否等于[1,3,5,7]或[18,9,23,30]”,显然判断结果为False,所以三次循环都会输出Element not in list1。
你最开始单独写的print(list1[0].index(1))是直接访问list1的第0个子列表,在子列表内部查找元素,所以能得到正确结果。
无需提前知道行列号的通用查找方法
可以通过enumerate遍历二维列表的行索引与行内容,再在每行内查找目标元素,匹配成功后直接返回对应的行号、列号即可,示例代码如下:
# 查找目标元素第一次出现的行列索引 def find_2d_element(two_dim_list, target): for row_idx, row in enumerate(two_dim_list): if target in row: col_idx = row.index(target) return (row_idx, col_idx) # 元素不存在时抛出异常,也可以根据需求自定义返回值 raise ValueError(f"元素{target}不存在于二维列表中") # 测试用例 list1=[[1,3,5,7],[18,9,23,30]] print(find_2d_element(list1, 1)) # 输出 (0, 0) print(find_2d_element(list1, 23)) # 输出 (1, 2)
如果需要查找目标元素所有出现的位置,修改为存储所有匹配结果即可:
# 查找目标元素所有出现的行列索引 def find_all_2d_element(two_dim_list, target): result = [] for row_idx, row in enumerate(two_dim_list): if target in row: col_idx = row.index(target) result.append((row_idx, col_idx)) return result
内容的提问来源于stack exchange,提问作者Kokin
相关产品推荐
相关产品推荐

