Python中如何通过子列表内的坐标元组获取列表索引?
如何通过坐标元组从列表的列表中查找对应元素或子列表
你需要从如下结构的列表中,通过坐标元组(比如(0,1))找到对应的子列表或元素:
example = [ ['a', (0,0)], ['b',(0,1)], ['c', (0,2)], ['d', (1,0)], ['e',(1,1)], ['d', (1,2)], # ... 更多元素 ]
之前尝试index()方法无法深入子列表查找,用itertools也没找到合适工具,测试代码中new_test = pad.index((0,1)in chain(*pad))报错ValueError——这是因为(0,1)in chain(*pad)返回的是布尔值True,而你的pad里没有布尔值元素,所以index()找不到对应值报错。
方法1:直接遍历查找(适合单次或少量查找)
循环遍历列表中的每个子列表,检查子列表的第二个元素是否等于目标坐标,找到后返回对应的子列表、索引或元素:
def find_by_coordinate(lst, target_coord): for idx, item in enumerate(lst): if item[1] == target_coord: # 返回子列表 return item # 或者返回索引:return idx # 或者返回元素:return item[0] # 没找到时返回None或抛出异常 return None # 测试示例 pad=[ ['1',(0,0)],['2',(0,1)],['3',(0,2)], ['4',(1,0)],['5',(1,1)],['6',(1,2)], ['7',(2,0)],['8',(2,1)],['9',(2,2)], ['0',(3,1)] ] result = find_by_coordinate(pad, (0,1)) print(result) # 输出 ['2', (0,1)] # 若只需要元素:print(result[0]) → '2'
方法2:预构建字典映射(适合多次查找,效率更高)
如果需要频繁根据坐标查找,先把坐标作为键,对应的子列表或元素作为值构建字典,之后查找只需O(1)时间:
# 构建坐标到子列表的映射字典 coord_to_item = {item[1]: item for item in pad} # 或者构建坐标到元素的映射字典 coord_to_digit = {item[1]: item[0] for item in pad} # 快速查找 print(coord_to_item[(0,1)]) # 输出 ['2', (0,1)] print(coord_to_digit[(0,1)]) # 输出 '2'
修正你的测试代码
把报错的new_test行替换成上述查找逻辑,修改后的完整代码:
from itertools import chain def pinpad_test(): pad=[ ['1',(0,0)],['2',(0,1)],['3',(0,2)], ['4',(1,0)],['5',(1,1)],['6',(1,2)], ['7',(2,0)],['8',(2,1)],['9',(2,2)], ['0',(3,1)] ] tester = '1234' print(tester) for dig in tester: print(dig) if dig in chain(*pad): print(f'Digit {dig} in pad') else: print('Failed') print('end of tester') # 替换原错误代码,用遍历查找坐标(0,1)对应的项 target_coord = (0,1) new_test = None for item in pad: if item[1] == target_coord: new_test = item break print(new_test) # 输出 ['2', (0,1)] if __name__ == '__main__': pinpad_test()
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

