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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:50:35